2010-10-30 75 views
1

所以,我把所有這些邏輯放在我的視角,認爲遵循DRY原則會有所幫助。ASP.NET MVC2 DRY視圖模式?

基本上,這種複製一個文件的形式,並在我的視圖模型,我對命名爲喜歡XXXConditionXXXComment其放在一起形成我的實際模型的InspectionDetail性能。

<table> 
    <% string secname =""; 
     foreach (PropertyInfo p in typeof(InspectionFormModel).GetProperties()) { 
      object[] sec = p.GetCustomAttributes(typeof(InspectionSection), false); 
      object[] name = p.GetCustomAttributes(typeof(DisplayNameAttribute), false); 
      string propname = p.Name; 

      /* Display a row for all view model properties having InspectionSection Attribute */ 
      if (sec.Length > 0) { 

       /* New Subheading */ 
       if (((InspectionSection)sec[0]).Section.ToString() != secname) { 
        secname = ((InspectionSection)sec[0]).Section.ToString(); 
        var secdesc = typeof(InspectionDetail.DetailTypes).GetMember(secname)[0].GetCustomAttributes(typeof(DescriptionAttribute), false); 
        string ssecdesc = (secdesc.Length == 0) ? secname : ((DescriptionAttribute)secdesc[0]).Description; 
        %> <tr><th><%= ssecdesc %></th><th>Condition</th><th>Remarks</th></tr><% 
       } 

       /* Use DisplayName attribute for item instead of property name if specified */ 
       if (name.Length > 0) 
       { 
        propname = ((DisplayNameAttribute)name[0]).DisplayName; 
       }%> 
    <tr> 
     <td><label for="<%= p.Name %>"><%= propname %></label></td> 
     <td><%= Html.DropDownList(p.Name, (IEnumerable<SelectListItem>)ViewData["ItemConditions"]) %></td> 
     <td><%= Html.TextBox(p.Name.Replace("Condition", "Comment"), null, new {Class ="comment"}) %></td> 
    </tr> 
    <% } } %> 
    </table> 

視圖中的所有代碼看起來像是一個確定的反模式。會有更好的地方來隱藏這個嗎?或者是愚蠢的依靠訂單屬性定義在視圖模型在所有

回答