兩個選項:
使用Html.EditorFor(..)
而不是直線式的觀點。 EditorFor考慮到用於達到屬性的前綴/ heirachy,或者在渲染子部分之前操縱T emplateInfo.HtmlFieldPrefix
,這將導致子部分呈現的每個字段被自動添加前綴。
如果你去選擇(2),考慮宣佈一個幫手,將包裹起來HtmlFieldPrefix
操作,以防止您忘記將其復位(我撕開的代碼下面ChildPrefixScope
從別的地方上SO一段時間前)。
如:
static public class MyHtmlHelpers
{
public static IDisposable BeginChildScope<TModel>(this HtmlHelper<TModel> html, string parentScopeName)
{
return new ChildPrefixScope(html.ViewData.TemplateInfo, parentScopeName);
}
private class ChildPrefixScope : IDisposable
{
private readonly TemplateInfo _templateInfo;
private readonly string _previousPrefix;
public ChildPrefixScope(TemplateInfo templateInfo, string collectionItemName)
{
this._templateInfo = templateInfo;
_previousPrefix = templateInfo.HtmlFieldPrefix;
templateInfo.HtmlFieldPrefix = collectionItemName;
}
public void Dispose()
{
_templateInfo.HtmlFieldPrefix = _previousPrefix;
}
}
}