繁体   English   中英

使用MVC 3(Razor)的ASP.NET部分视图和隐藏变量

[英]ASP.NET partial views and hidden variables with MVC 3 (Razor)

从模型生成隐藏变量时,仅使用变量名称。 如果使用模型的嵌套类/结构,则使用类/结构名称。 这有助于发布表单,因为系统更容易看到它正在填充的对象。

但是,在使用部分视图时,我经常传入模型的部分内容,这意味着隐藏字段不再包含结构/类名。 在重建回发的参数时,这可能导致数据冲突或丢失。 有没有办法让Html.HiddenFor(或等效的)将类/结构名称放在前面?

两种选择:

  1. 使用Html.EditorFor(..)而不是直接部分视图。 EditorFor考虑到用于到达酒店的前缀/ heirachy,或者,

  2. 在渲染子部分之前操纵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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM