2014-01-28 4 views
0

Я думаю, что я не ясно, с @model, который может быть частью представления Напримериспользование модели в View

@model MyModel 
  1. ли это входной аргумент, который я могу заполнить и вызвать вид с помощью?

    return View("MyView", MyModel);

  2. ли это выхода переменным я могу заполнить в течение поста зрения (для следующего действия управления)

    [HttpPost]

    public ActionResult SomePostAction(MyModel myModel) //(and in post action)

  3. ли оба ??

ответ

0

3, это как!

Это называется model binding. Особенность ASP.NET, которая делает тривиальным привязку режима к представлению. Отсюда и название «модель взгляда», которую обычно называют эти модели.

Назначение модели вашему представлению дает вам так называемое строго типизированное представление, которое полностью раскрывает силу синтаксиса Razor.

Модельное связующее устройство может привязывать значения каждого входного поля к модели при отправке form, если атрибут name формы соответствует имени свойства в модели представления. Помощники Html, такие как Html.EditorFor(m => m.SomeProperty), делают это тривиальной задачей.

Как упоминает Mystere Man, это также возможно сделать без реальной модели на ваш взгляд. Например, это работает:

Html (я опустил тэг формы и кнопку отправки):

<input type="text" name="SomeString" /> 

с помощью этого метода в контроллере:

[HttpPost] 
public ActionResult SomeAction(string someString) 
{ 
    // ... 
} 
+1

Вид. Это вход. Связывание модели происходит независимо от того, что представляет собой оператор @model, хотя он, безусловно, помогает форматировать данные в том же формате, что и ожидаемое. –

0

@model декларации в верхней части ваше представление связано с объектом модели, который вы передали методу View() в вашем контроллере (вариант 1 в вашем вопросе). Объявление @model - это ваш способ сообщить движку просмотра Razor, что вид строго типизирован. Это означает, что компилятор C# может дважды проверять любые свойства ваших просмотров.

Предположим, вы имели следующий класс

public class MyModel 
{ 
    public string Name { get; set; } 
} 

Без сильно типизированной вы могли бы иметь что-то вроде этого, на ваш взгляд

<div> 
    Hello, @Model.Nmae 
</div> 

Обратите внимание, что есть опечатка в имени. ASP.Net не знает, какая у вас модель, поэтому она должна использовать динамический объект. Вы не найдете эту ошибку до выполнения.Если у вас есть delcared @model MyModel, у вас будет ошибка во время сборки, потому что у MyModel нет свойства Nmae.

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

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