2011-10-11 28 views
0

從模型生成隱藏變量時,僅使用變量名稱。如果使用模型中的嵌套類/結構,則使用類/結構名稱。這有助於發佈表單,因爲系統更容易看到它正在填充的對象。使用MVC 3(剃刀)的ASP.NET局部視圖和隱藏變量

但是,在使用部分視圖時,我經常會傳入模型的某些部分,這意味着隱藏字段不再具有結構/類名稱。這可能會在重新構建回發的參數時導致數據衝突或丟失。有什麼辦法讓Html.HiddenFor(或等效的)把類/結構名稱放在前面?

回答

2

兩個選項:

  1. 使用Html.EditorFor(..)而不是直線式的觀點。 EditorFor考慮到用於達到屬性的前綴/ heirachy,或者在渲染子部分之前操縱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; 
     } 
    } 

}