2010-02-07 37 views
6

Dường như nếu bạn chỉ cần sử dụng Html.DisplayFor(model => model) không có mẫu cho một cái nhìn chi tiết, đánh dấu kết quả sẽ giống như thế này:Templating Html.DisplayFor() trong 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> 

này có mức độ công bằng của tính linh hoạt. Nếu bạn tạo các lớp CSS cho display-labeldisplay-field, bạn có thể làm khá một chút, nhưng nếu tôi muốn thay đổi nó thành một cái gì đó như thế này thì sao?

<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> 

Lưu ý rằng bây giờ cặp giá trị thuộc tính giờ xuất hiện cạnh nhau (thay vì trên các dòng riêng biệt) và có dấu hai chấm sau mỗi thuộc tính.

Có cách nào để tạo mẫu tùy chỉnh sẽ được lặp lại cho mỗi cặp giá trị thuộc tính khi chế độ xem chi tiết được giàn giáo không?

Tôi không nói về mẫu cụ thể cho mô hình (ví dụ: mẫu Person) hoặc mẫu cho một thuộc tính cụ thể (ví dụ: mẫu EmailAddress). Tôi muốn cái gì đó chỉ cho phép tôi mô tả cách một cặp thuộc tính-giá trị trông như thế nào, sau đó DispalyFor() sẽ tự động lặp lại mẫu đó cho từng thuộc tính trong mô hình của tôi hoặc mô hình xem.

Trả lời

9

Cách ghi đè mẫu Object, ví dụ:

<%@ 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> 
    <% } %> 

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

+0

Đây chính là những gì tôi cần. Cảm ơn bạn. – devuxer

+0

Đề xuất sửa đổi điều này để sử dụng CSS như một câu hỏi tương tự http://stackoverflow.com/questions/3055376/style-list-of-divs-as-2-column-layout-with-css – Bermo

Các vấn đề liên quan