从模型生成隐藏变量时,仅使用变量名称。如果使用模型的嵌套类/结构,则使用类/结构名称。这有助于发布表单,因为系统更容易看到它正在填充的对象。
但是,在使用部分视图时,我经常传入模型的部分内容,这意味着隐藏字段不再包含结构/类名。在重建回发的参数时,这可能导致数据冲突或丢失。有没有办法让Html.HiddenFor(或等效的)将类/结构名称放在前面?
答案 0 :(得分:2)
两个选项:
使用Html.EditorFor(..)
代替直接部分视图。 EditorFor考虑到用于到达该属性的前缀/ heirachy,或
在渲染子部分之前操纵T emplateInfo.HtmlFieldPrefix
,这将导致子项呈现的每个字段自动加上前缀。
如果你选择选项(2),考虑声明一个帮助器,它将包含HtmlFieldPrefix
操作,以防止你忘记重置它(我从其他地方撕掉了ChildPrefixScope
下面的代码在一段时间之前)。
例如:
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;
}
}
}