将数据从服务返回到控制器的动作时,处理空数据的最佳方法是什么。在下面的示例中,我查询服务页面。但如果该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);
}
我是否应该创建一个更精细的ViewModel,它具有一个名为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>
其他人在这种情况下做了什么?上述情况会很好,但有没有更明智或更有效的方法来做到这一点?
干杯
答案 0 :(得分:0)
有两种可能性浮现在脑海中:
显示404页面:
public ActionResult Edit(int id)
{
var page = Services.PageService.GetPage(id);
if(page == null)
{
return HttpNotFound();
}
return View(page);
}
如果要在同一视图上显示错误,可以在视图模型上包含一个属性,指示找不到该项,并在相应的视图中对此属性进行测试。
所以基本上它取决于你希望在这种情况下如何向用户呈现错误。
答案 1 :(得分:0)
如果page为null,则返回Content。喜欢:
public ActionResult Edit(int id)
{
var page = Services.PageService.GetPage(id);
if(page == null)
{
return Content("CANNOT FIND PAGE");
}
return View(page);
}