Как установить @model.attribute в режиме бритвы?

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

@model.attribute = "whatever'

Ответ 1

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

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