【发布时间】:2015-06-23 02:24:22
【问题描述】:
我正在使用 ASP.NET MVC 4.5+,我试图理解为什么要使用 Html.EditorFor 而不是 Html.PartialView 呈现部分视图。
我发现 EditorFor “尊重模型层次结构”,我收集的意思是,对于 EditorFor 呈现的视图中的输入,输入名称/ID 反映调用模型的嵌套级别,并且 PartialViews 不会这样做。
但是,在下面的局部视图中:
@model someModel
...
@Html.TextboxFor(m => m.complexObject.property)
...
将文本框呈现为
<input id="complexObject_property" name="complexObject.property" ... >
当通过 Html.PartialView 渲染时,至少在 MVC 4.5+ 中。在我看来,这似乎很好地尊重了模型层次结构。
我了解 DisplayFor 和 EditorFor 将告诉框架自动查看 ~/*Templates 文件夹以返回由这些控件调用的视图的视图。所以,我目前唯一能想到的是,我们将使用 Display/EditorFor 来允许这种文件/文件夹结构和自动渲染,这比在“共享”文件夹中查找更具语义性专门命名为partial。
就目前而言,即使是微软的文档似乎也暗示 Html.EditorFor 仅用于呈现单个输入,而不是视图:https://msdn.microsoft.com/en-us/library/system.web.mvc.html.editorextensions.editorfor(v=vs.118).aspx
【问题讨论】:
-
您指定完全限定名称 -
m => m.complexObject.property所以它当然会生成name="complexObject.property"。EditorFor()并非仅用于单个输入。事实上,它更常用于复杂对象和集合,为复杂模型生成正确的名称属性。使用部分通常意味着必须按照this example 将前缀传递给部分
标签: c# asp.net asp.net-mvc asp.net-mvc-4