Во-первых, капитализация имеет значение.
@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"
.
* * 1039 Контроллер * * 1040
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");