Два варианта:
Используйте Html.EditorFor(..)
вместо прямых частичных видов. EditorFor учитывает префикс / иерархию, использованный для доступа к свойству, или
манипулирует 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;
}
}
}