Как установить @ model.attribute в бритве? - PullRequest
36 голосов
/ 27 сентября 2011

У меня есть обязательное поле, строковый атрибут {get; set} в классе и хотите установить его значение в бритве. Возможно ли что-то вроде следующего?

@model.attribute = "whatever'

1 Ответ

92 голосов
/ 27 сентября 2011

Во-первых, капитализация имеет значение.

@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");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...