2010-02-07 92 views
6

看來,如果你只是用Html.DisplayFor(model => model)沒有模板詳細信息視圖,隨之產生的標記會是這個樣子:模板Html.DisplayFor()在ASP.NET MVC 2

<div class="display-label">first name</div> 
<div class="display-field">Dan</div> 
<div class="display-label">last name</div> 
<div class="display-field">M</div> 
<div class="display-label">email</div> 
<div class="display-field">[email protected]</div> 

這有相當程度的靈活性。如果您對display-labeldisplay-field創建CSS類,你可以做了不少,但如果我想將它更改爲這樣的事情是什麼?

<p> 
    <span class="display-label">first name</span>: 
    <span class="display-field">Dan</span> 
</p> 
<p> 
    <span class="display-label">last name</span>: 
    <span class="display-field">M</span> 
</p> 
<p> 
    <span class="display-label">email</span>: 
    <span class="display-field">[email protected]</span> 
</p> 

注意,現在的屬性值對現在顯示側由端(而不是在單獨的行),並有每個屬性後冒號。

有什麼方法來創建將重複每個屬性值對,當詳細信息視圖是腳手架自定義模板?

我不是在談論模型(例如,Person模板)的特定模板或特定屬性(例如EmailAddress模板)的模板。我想要的東西,只是讓我描述一個屬性值對的樣子,然後DispalyFor()應自動重複模板在我的模型或視圖模型每個屬性。

回答

9

如何重寫Object模板,例如

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
    <% if (ViewData.TemplateInfo.TemplateDepth > 3) { %> 
     <%= ViewData.ModelMetadata.SimpleDisplayText %> 
    <% } else { %> 
     <table> 
     <% foreach (ModelMetadata prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { %> 
      <% if (prop.HideSurroundingHtml) { %> 
       <%= Html.Display(prop.PropertyName) %> 
      <% } else { %> 
       <tr> 
        <td> 
         <div class="display-label" style="text-align: right;"> 
          <%= Html.Label(prop.PropertyName) %> 
         </div> 
        </td> 
        <td> 
         <div class="display-field"> 
          <%= Html.Display(prop.PropertyName) %> 
          <%= Html.ValidationMessage(prop.PropertyName, "*") %> 
         </div> 
        </td> 
       </tr> 
      <% } %> 
     <% } %> 
     </table> 
    <% } %> 

http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

+0

這正是我需要的。謝謝。 – devuxer 2010-02-11 21:14:35

+0

建議修改此使用CSS像一個類似的問題http://stackoverflow.com/questions/3055376/style-list-of-divs-as-2-column-layout-with-css – Bermo 2010-12-21 22:06:51