1
所以,我把所有這些邏輯放在我的視角,認爲遵循DRY原則會有所幫助。ASP.NET MVC2 DRY視圖模式?
基本上,這種複製一個文件的形式,並在我的視圖模型,我對命名爲喜歡XXXCondition
和XXXComment
其放在一起形成我的實際模型的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>
視圖中的所有代碼看起來像是一個確定的反模式。會有更好的地方來隱藏這個嗎?或者是愚蠢的依靠訂單屬性定義在視圖模型在所有?
在你的控制器/操作方法進行初始化。謝謝。 – 2010-10-30 03:24:32