我不知道如何最好地解释这个,所以我已经链接到一个图片,显示问题。我有一个简单的表格,我为每个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