2012-02-15 75 views
0

将数据从服务返回到控制器的操作时,处理空数据的最佳方法是什么?在下面的例子中,我查询服务的页面。但是,如果该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> 

什么其他人在这种情况下做什么?上述情况可以正常工作,但是有没有更聪明或者更好的方法来做到这一点?

干杯

+1

在我看来,它完全取决于你想要做什么*当发生错误。如果在这种情况下显示“无法找到页面”就是您想要做的事情,那么我认为您的方法没有任何问题。除此之外,我个人会传递null,并在视图中检查null。 – 2012-02-15 04:10:14

回答

0

返回页面为空的内容。像:

public ActionResult Edit(int id) 
{ 
    var page = Services.PageService.GetPage(id); 

    if(page == null) 
    { 
     return Content("CANNOT FIND PAGE"); 
    } 

    return View(page); 
} 
0

2的可能性浮现在脑海中:

  1. 显示404页:

    public ActionResult Edit(int id) 
    { 
        var page = Services.PageService.GetPage(id); 
    
        if(page == null) 
        { 
         return HttpNotFound(); 
        } 
    
        return View(page); 
    } 
    
  2. 如果你想在同一个视图中显示的错误,您可以包括您的视图模型中的属性指示该项目未找到,并在相应视图中针对此属性进行测试。

所以基本上,这取决于您希望在这种情况下向用户呈现错误的方式。

相关问题