View中的模型用法

时间:2014-01-28 20:37:40

标签: asp.net-mvc razor model asp.net-mvc-5

我认为我不清楚@model可以成为视图的一部分 例如

@model MyModel
  1. 是否可以填充输入参数并使用?

    调用视图

    return View("MyView", MyModel);

  2. 是否可以在视图发布期间填充输出变量(用于下一个控制操作)

    [HttpPost]

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

  3. 两者 ??

2 个答案:

答案 0 :(得分:0)

3,两者都是!

它被称为model binding。 ASP.NET的一个功能,它使将模式绑定到视图变得微不足道。因此,名称'视图模型',通常称为这些模型。

为视图指定模型会为您提供一个所谓的强类型视图,它完全暴露了Razor语法的强大功能。

模板绑​​定器能够在发布form时将每个输入字段的值绑定回模型,只要表单的name属性与该属性的名称匹配即可。查看模型。诸如Html.EditorFor(m => m.SomeProperty)之类的Html帮助程序使这成为一项微不足道的任务。

正如Mystere Man所提到的那样,在您的视图中没有实际模型的情况下也可以这样做。例如,这有效:

Html(我省略了表单标签和提交按钮):

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

在您的控制器中使用此方法:

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

答案 1 :(得分:0)

视图顶部的@model声明与您传递给控制器​​中View()方法的模型对象相关(问题中的选项1)。 @model声明是告诉Razor视图引擎视图强类型的方式。这意味着C#编译器可以仔细检查视图访问的任何属性。

假设您有以下课程

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

如果没有强类型视图,您可能会在视图中看到类似的内容

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

请注意,姓名中有拼写错误。 ASP.Net不知道你的模型是什么,所以它必须使用动态对象。在运行时之前,您不会发现该错误。如果您有@model MyModel,则在构建时会出现错误,因为MyModel没有Nmae属性。

但是,使用相同的模型类型作为操作的参数并不罕见。想象一下,您的页面是一个HTML表单。在这种情况下,您的视图被强类型化的模型以及传递给MVC操作的模型可能是相同的。