我认为我不清楚@model可以成为视图的一部分 例如
@model MyModel
是否可以填充输入参数并使用?
调用视图 return View("MyView", MyModel);
是否可以在视图发布期间填充输出变量(用于下一个控制操作)
[HttpPost]
public ActionResult SomePostAction(MyModel myModel) //(and in post action)
是两者 ??
答案 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操作的模型可能是相同的。