2011-09-26 5 views

ответ

86

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

@model (в нижнем регистре «м») является зарезервированным ключевым словом в представлениях бритвенных объявить тип модели в верхней части вашей точки зрения, например:

@model MyNamespace.Models.MyModel

Далее в файле, вы можете ссылаться на атрибут, который вы хотите с @Model.Attribute (в верхнем регистре «М»).

@model заявляет модель. Model ссылается на экземпляр модели.

Во-вторых, вы можете присвоить значение своей модели и использовать ее позже на странице, но она не будет сохраняться, когда страница подчиняется действию вашего контроллера, если это не значение в поле формы. Для того, чтобы получить значение обратно в вашей модели в процессе модели связывания, вам нужно присвоить значение поля формы, например:

Вариант 1

В вашем действии контроллера необходимо создать модель для первого представления вашей страницы, в противном случае при попытке установить Model.Attribute объект Model будет равен нулю.

Контроллер:

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

+1

Благодарим Вас за это. Отличный ответ. – levteck

+1

Этот ответ должен войти в зал славы – petric

Смежные вопросы