簡體   English   中英

為什么使用EditorFor over PartialView在MVC 4.5+中渲染局部視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM