У меня есть обязательное поле, строковый атрибут {get; set} в классе и хотите установить его значение в бритве. Возможно ли следующее:
@model.attribute = "whatever'
У меня есть обязательное поле, строковый атрибут {get; set} в классе и хотите установить его значение в бритве. Возможно ли следующее:
@model.attribute = "whatever'
Во-первых, важна капитализация.
@model
(нижний регистр "m" ) является зарезервированным ключевым словом в представлениях Razor, чтобы объявить тип модели в верхней части вашего представления, например:
@model MyNamespace.Models.MyModel
Позже в файле вы можете ссылаться на свой атрибут с @Model.Attribute
(в верхнем регистре "M" ).
@model
объявляет модель. Model
ссылается на экземпляр модели.
Во-вторых, вы можете присвоить значение своей модели и использовать ее позже на странице, но она не будет постоянной, когда страница подчиняется действию вашего контроллера, если это не значение в поле формы. Чтобы вернуть значение в вашей модели во время процесса привязки модели, вам нужно назначить значение в поле формы, например:
Вариант 1
В действии вашего контроллера вам нужно создать модель для первого представления вашей страницы, иначе при попытке установить Model.Attribute
объект Model
будет иметь значение null.
Контроллер:
// 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);
}
Вид:
@{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 *@
Вариант 2
Или, поскольку модели основаны на имени, вы можете пропустить создание модели в своем контроллере и просто называть поле формы тем же именем, что и ваше свойство модели. В этом случае установка скрытого поля с именем "Атрибут" на "все" гарантирует, что при отправке страницы значение "все равно" будет привязано к свойству модели Attribute
во время процесса привязки модели. Обратите внимание, что это не должно быть скрытое поле, просто любое поле ввода HTML с name="Attribute"
.
Контроллер:
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);
}
Вид:
@Html.Hidden("Attribute", "whatever");