我不知道如何最好地解釋這個,所以我已經鏈接到一個圖片,顯示問題。我有一個簡單的表格,我爲每個td項目調用DisplayForModel(),這樣我就可以在表格中渲染不同的東西。在asp.net mvc處理空值DisplayForModel
alt text http://img844.imageshack.us/img844/4142/displayformodelnullvalu.png
我遇到的問題是,當一個數據庫記錄具有空值。例如在此屏幕截圖中的地址,電話和傳真字段。 DisplayForModel似乎是呈現視圖模型的所有屬性。
爲了給出一點上下文,我在控制器中取出一些記錄並將它們選擇到一個對象中[]。我使用對象數組而不是字符串等的原因是,我可以爲不同的對象類型定義模板。
public ActionResult List(int? page, int? departmentId, string search)
{
var model = (from e in UserRepository.FindAllUsersThatMatch(CompanyId, departmentId.GetValueOrDefault(-1), search).IsNotDeleted()
select new object[] {
new Link() { Name = string.Format("{0} {1}", e.Firstname, e.Surname), LinkAddress = Url.Action("Edit", "Employee", new { Id = e.Id}) } ,
e.DateOfBirth,
e.StreetAddress,
e.Suburb ?? "",
e.State,
e.Postcode,
e.Home,
e.Mobile,
e.EmailAddress
}).ToDynamicListView(page, Request.RequestContext.RouteData, "Employee", "DOB", "Street Address", "Suburb", "State", "Postcode", "Home", "Mobile", "Email");
return View("List", model);
}
的ToDynamicListView HTML幫助設置了我我呼籲DynamicListModel這種模式的行是這樣的分頁列表視圖模型;
DynamicListModel model = ...
model.Rows = new PagedList<DynamicListRow>(source, page.Value, 10);
在我看來,我會把這種模式開了一個局部的渲染(呈現數據的你鏈接的圖片中看到的表。
<% Html.RenderPartial("DynamicListView", Model); %>
這對錶創建HTML和做類似
<table>
<thead>
<tr><th>header1</th><th>header2</th> etc.</tr>
</thead>
foreach (row)
{
<tr>
foreach (cell)
{
<td><% Html.RenderPartial("DynamicListCell", cell); %></td>
}
} </tr>
</table>
所以每個小區使用DisplayForModel呈現的東西的部分是相當簡單的,看起來像這樣。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<object>" %>
<%= Html.DisplayForModel()%>
我已經試過檢查傳遞給partial的對象是否爲null並且不呈現,但似乎也不起作用。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<object>" %>
<% if (Model != null) {%>
<%= Html.DisplayForModel()%>
<% } %>
的原因,我使用ViewUserControl,而不是一個適當的輸入部分是因爲這個DisplayForPartial正在呼籲行的列表內的每個細胞。
這被提及爲表中的每個td單元格。這使我可以根據類型呈現不同的模板。
這是一個有點拉伸,但我甚至嘗試在DisplayTemplates下創建一個Null.ascx部分,如果它爲null對象,它可能會呈現。 我不感到驚訝,看看這並沒有解決我的問題;) – 2010-07-19 14:32:34