[英]Why use EditorFor over PartialView to render a partial view in MVC 4.5+
我正在使用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
假設您有一個模型,如下所示:
public class ExampleModel
{
public int ID { get; set; }
public string Name { get; set; }
}
此外,假設您在EditorTemplates文件夾中的/ Shared中有這個名為ExampleModel.cshtml的視圖:
@model ExampleModel
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
@Html.HiddenFor(m => m.ID)
為了繼續我們的假設,讓我們說你也有這個模型:
public class ExampleListModel
{
public ICollection<ExampleModel> Examples { get; set; }
}
通過ExampleListModel的視圖,您可以執行以下操作:
@model ExampleListModel
@Html.EditorFor(m => m.Examples)
Razor引擎將查找(並在本例中查找)與“item”類的名稱匹配的視圖(在我的示例中為ExampleModel)。 如果是這樣,它將遍歷集合,為ExampleListModel.Examples中的每個項生成一行。 作為副作用,它還以這樣的方式命名控件,即可以以默認模型綁定器理解的方式將集合發布到控制器。 因此生成的標記可能看起來像
<label for="Examples[0].Name">Name</label>
<input id="Examples[0].Name" name="Examples_0__Name" value="Fee" />
<input id="Examples[0].ID" name="Examples_0__ID" value="1" />
<label for="Examples[1].Name">Name</label>
<input id="Examples[1].Name" name="Examples_1__Name" value="Fi" />
<input id="Examples[1].ID" name="Examples_1__ID" value="2" />
<label for="Examples[2].Name">Name</label>
<input id="Examples[2].Name" name="Examples_2__Name" value="Fo" />
<input id="Examples[2].ID" name="Examples_2__ID" value="3" />
依此類推,索引遞增。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.