如何处理控制器/视图模型中的空数据
问题描述:
将数据从服务返回到控制器的操作时,处理空数据的最佳方法是什么?在下面的例子中,我查询服务的页面。但是,如果该ID的页面不存在,我该如何处理?如何处理控制器/视图模型中的空数据
public ActionResult Edit(int id)
{
var page = Services.PageService.GetPage(id);
if(page == null)
{
// Do something about it so that the view model doesn't throw an
//exception when it gets passed a null Page object
}
return View(page);
}
我应该创建一个具有名为Found
布尔属性更详尽的视图模型,所以我可以做这样的事情:在视图模型
public ActionResult Edit(int id)
{
var page = Services.PageService.GetPage(id);
var viewModel = new PageEditViewModel()
{
Found = (page != null),
Page = page
};
return View(viewModel);
}
然后
@model Payntbrush.Presentation.Demo.MVC3.Areas.Admin.Models.PageIndexViewModel
@{
ViewBag.Title = "Index";
}
<h2>Pages</h2>
<table>
<tr>
<td><strong>Title</strong></td>
</tr>
@if (@Model.Found)
{
@foreach (var page in @Model.Pages)
{
<tr>
<td>@page.Title</td>
<td>@Html.ActionLink("Edit", "Edit", "Page", new {id = @page.Id})</td>
</tr>
}
}
else
{
<strong>CANNOT FIND PAGE</strong>
}
</table>
什么其他人在这种情况下做什么?上述情况可以正常工作,但是有没有更聪明或者更好的方法来做到这一点?
干杯
答
返回页面为空的内容。像:
public ActionResult Edit(int id)
{
var page = Services.PageService.GetPage(id);
if(page == null)
{
return Content("CANNOT FIND PAGE");
}
return View(page);
}
答
2的可能性浮现在脑海中:
-
显示404页:
public ActionResult Edit(int id) { var page = Services.PageService.GetPage(id); if(page == null) { return HttpNotFound(); } return View(page); }
如果你想在同一个视图中显示的错误,您可以包括您的视图模型中的属性指示该项目未找到,并在相应视图中针对此属性进行测试。
所以基本上,这取决于您希望在这种情况下向用户呈现错误的方式。
在我看来,它完全取决于你想要做什么*当发生错误。如果在这种情况下显示“无法找到页面”就是您想要做的事情,那么我认为您的方法没有任何问题。除此之外,我个人会传递null,并在视图中检查null。 – 2012-02-15 04:10:14