[英]ASP.NET partial views and hidden variables with MVC 3 (Razor)
从模型生成隐藏变量时,仅使用变量名称。 如果使用模型的嵌套类/结构,则使用类/结构名称。 这有助于发布表单,因为系统更容易看到它正在填充的对象。
但是,在使用部分视图时,我经常传入模型的部分内容,这意味着隐藏字段不再包含结构/类名。 在重建回发的参数时,这可能导致数据冲突或丢失。 有没有办法让Html.HiddenFor(或等效的)将类/结构名称放在前面?
两种选择:
使用Html.EditorFor(..)
而不是直接部分视图。 EditorFor考虑到用于到达酒店的前缀/ heirachy,或者,
在渲染子部分之前操纵T emplateInfo.HtmlFieldPrefix
,这将导致子项呈现的每个字段自动加上前缀。
如果你选择选项(2),考虑声明一个帮助器,它将包装HtmlFieldPrefix
操作以防止你忘记重置它(我在ChildPrefixScope
某个地方从我的某个地方撕下了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;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.