2010-12-15 35 views
4

我有一個使用複雜類型作爲屬性的模型。在ASP.NET MVC3中顯示覆雜類型RC2

namespace Web.Models { 
    public class Business : IModel { 
     [Key, HiddenInput(DisplayValue = false)] 
     public Guid ID { get; set; } 

     public Position Position { get; set; } 

     public bool Active { get; set; } 

     public ICollection<Comment> Comments { get; set; } 

     public Business() { 
      ID = Guid.NewGuid(); 
      Position = new Position(); 
     } 
    } 

    public class Position { 
     public double Latitude { get; set; } 
     public double Longitude { get; set; } 
    } 
} 

當我開始創建業務模型的表單時,Position屬性未顯示。我敢肯定複雜類型默認顯示在MVC2中。假設這可能是在MVC3交換機我嘗試以下步驟無濟於事:

  1. 裝飾與ScaffoldColumn(true)屬性的位置屬性。
  2. 在Views \ Shared \ EditorTemplates中創建了Position.cshtml視圖。

我目前的解決方法是將我自定義的Object.ascx從MVC2轉換爲MVC3 Razor Object.cshtml。我的猶豫是,我的自定義Object.ascx是基於Brad Wilson博客的原文。

@if (ViewData.TemplateInfo.TemplateDepth > 1) { 
    @ViewData.ModelMetadata.SimpleDisplayText 
} 
else { 
    <div class="editor"> 
     @foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !ViewData.TemplateInfo.Visited(pm))) { 
     if (prop.HideSurroundingHtml) { 
      @Html.Editor(prop.PropertyName) 
     } 
     else { 
      <div class="field"> 
       @(prop.IsRequired ? "*" : "") 
       @Html.Label(prop.PropertyName) 
       @Html.Editor(prop.PropertyName) 
       @Html.ValidationMessage(prop.PropertyName) 
      </div> 
     } 
    } 
    </div> 
} 

所以問題是:

  1. 有默認的行爲改變還是我失去了一些東西?
  2. 有沒有更好的方法來打開復雜類型的可見性?
  3. 是否可以訪問ASP.NET MVC3中的默認模板?

回答

0

默認Object.ascx模板只顯示一個對象圖的一個級別。

上面有一行檢查深度是否大於1,然後在渲染時保留。

<% } else if (ViewData.TemplateInfo.TemplateDepth > 1) { %> 

更改爲:

<% } else if (ViewData.TemplateInfo.TemplateDepth > 99) { %> 

或刪除,如果完全。

+0

謝謝@jfar,但是「> 1」是我目前正在使用的解決方法,與自定義模板(Position.cshtml)結合使用。新的默認Object.cshtml中必須有其他內容防止複雜類型。 – kim3er 2010-12-15 13:13:10

+0

@ kim3er - 所以你的說法改變> 8283不渲染位置模板? – jfar 2010-12-15 13:26:23

+0

不,我說的是> 1,使用附加到原始問題的模板。 – kim3er 2010-12-15 13:34:36