【问题标题】:ASP.NET partial views and hidden variables with MVC 3 (Razor)使用 MVC 3 (Razor) 的 ASP.NET 部分视图和隐藏变量
【发布时间】:2011-10-11 05:24:01
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    两种选择:

    1. 使用Html.EditorFor(..) 而不是直接的局部视图。 EditorFor 考虑了用于访问属性的前缀/层次结构,或者,

    2. 在渲染子部分之前操作 TemplateInfo.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;
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-29
      • 2019-10-15
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多