我正在使用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
1 回答
假设您有一个模型,如下所示:
此外,假设您在EditorTemplates文件夹中的/ Shared中有这个名为ExampleModel.cshtml的视图:
为了继续我们的假设,让我们说你也有这个模型:
通过ExampleListModel的视图,您可以执行以下操作:
Razor引擎将查找(并在本例中查找)与“item”类的名称匹配的视图(在我的示例中为ExampleModel) . 如果是这样,它将遍历集合,为ExampleListModel.Examples中的每个项生成一行 . 作为副作用,它还以这样的方式命名控件,即可以以默认模型 Binders 理解的方式将集合发布到控制器 . 因此生成的标记可能看起来像
依此类推,索引递增 .