Mam wymagane pole, ciąg atrybut {get; ustaw} w klasie i chcesz ustawić jego wartość w maszynce do golenia. Czy jest możliwe wykonanie następujących czynności?Jak ustawić @ model.attribute w widoku maszynki?
@model.attribute = "whatever'
Mam wymagane pole, ciąg atrybut {get; ustaw} w klasie i chcesz ustawić jego wartość w maszynce do golenia. Czy jest możliwe wykonanie następujących czynności?Jak ustawić @ model.attribute w widoku maszynki?
@model.attribute = "whatever'
Po pierwsze, kwestia kapitalizacji ma znaczenie.
@model
(małe „m”) jest zarezerwowanym kluczowe w widokach Razor zadeklarować typ modelu w górnej części widoku, np:
@model MyNamespace.Models.MyModel
Później w pliku, można odwoływać się do atrybut, który chcesz z @Model.Attribute
(wielkie litery "M").
@model
Deklaruje model. Model
odwołuje się do instancji modelu.
Po drugie, można przypisać wartość do modelu i użyć jej później na stronie, ale nie będzie ona trwała, gdy strona przejdzie do działania kontrolera, chyba że jest to wartość w polu formularza. W celu uzyskania wartości z powrotem w modelu podczas procesu modelu wiążącego, trzeba przypisać wartość do pola formularza, np:
Wariant 1
w swojej akcji kontrolera trzeba stworzyć model pierwszego widoku strony, w przeciwnym razie przy próbie ustawienia Model.Attribute
obiekt Model
będzie pusty.
Kontroler:
// 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);
}
Widok:
@{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 *@
Opcja 2
Albo, ponieważ modele są nazwa oparte, można pominąć tworząc model w kontrolerze i po prostu nazwij pole formularza taką samą jak twoja własność modelu. W takim przypadku ustawienie ukrytego pola o nazwie "Atrybut" na "cokolwiek" zapewni, że po przesłaniu strony wartość "cokolwiek" zostanie przypisana do właściwości modelu danego modelu podczas procesu wiązania modelu. Zauważ, że nie musi to być ukryte pole, tylko dowolne pole wejściowe HTML z name="Attribute"
.
Kontroler:
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);
}
Widok:
@Html.Hidden("Attribute", "whatever");
Dziękuję za to. Świetna odpowiedź. – levteck
Ta odpowiedź powinna trafić do hali sławy – petric