web-dev-qa-db-fra.com

Comment définir @ model.attribute en vue rasoir?

J'ai un champ obligatoire, un attribut de chaîne {get; set} dans une classe et souhaitez définir sa valeur dans le rasoir. Est-ce que quelque chose comme ce qui suit est possible?

@model.attribute = "whatever'
38
genxgeek

Premièrement, la capitalisation est importante.

@model ("M" minuscule) est un mot-clé réservé dans les vues Razor pour déclarer le type de modèle en haut de votre vue, par exemple:

@model MyNamespace.Models.MyModel

Plus loin dans le fichier, vous pouvez référencer l'attribut souhaité avec @Model.Attribute ("M" majuscule).

@model Déclare le modèle. Model fait référence à l'instanciation du modèle.

Deuxièmement, vous pouvez attribuer une valeur à votre modèle et l'utiliser plus tard dans la page, mais elle ne sera pas persistante lorsque la page se soumettra à l'action de votre contrôleur, sauf s'il s'agit d'une valeur dans un champ de formulaire. Afin de récupérer la valeur dans votre modèle pendant le processus de liaison du modèle, vous devez affecter la valeur à un champ de formulaire, par exemple:

Option 1

Dans votre action de contrôleur, vous devez créer un modèle pour la première vue de votre page, sinon lorsque vous essayez de définir Model.Attribute, L'objet Model sera nul.

Manette:

// This accepts [HttpGet] by default, so it will be used to render the first call to the page
public ActionResult SomeAction()
{
    MyModel model = new MyModel();
    // optional: if you want to set the property here instead of in your view, you can
    // model.Attribute = "whatever";
    return View(model);
}

[HttpPost] // This action accepts data posted to the server
public ActionResult SomeAction(MyModel model)
{
    // model.Attribute will now be "whatever"
    return View(model);
}

Vue:

@{Model.Attribute = "whatever";} @* Only do this here if you did NOT do it in the controller *@
@Html.HiddenFor(m => m.Attribute); @* This will make it so that Attribute = "whatever" when the page submits to the controller *@

Option 2

Ou, comme les modèles sont basés sur le nom, vous pouvez ignorer la création du modèle dans votre contrôleur et simplement nommer un champ de formulaire du même nom que la propriété de votre modèle. Dans ce cas, la définition d'un champ masqué nommé "Attribut" sur "n'importe quoi" garantira que lorsque la page sera soumise, la valeur "que ce soit" sera liée à la propriété Attribute de votre modèle pendant le processus de liaison de modèle. Notez qu'il ne doit pas être un champ caché, juste n'importe quel champ de saisie HTML avec name="Attribute".

Manette:

public ActionResult SomeAction()
{
     return View();
}

[HttpPost] // This action accepts data posted to the server
public ActionResult SomeAction(MyModel model)
{
    // model.Attribute will now be "whatever"
    return View(model);
}

Vue:

@Html.Hidden("Attribute", "whatever");

95
nekno