如何处理控制器/视图模型中的空数据

本文关键字:模型 视图 数据 控制器 何处理 处理 | 更新日期: 2023-09-27 18:24:31

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

在这种情况下,其他人会怎么做?上述情况会很好,但有没有更聪明或更受欢迎的方法可以做到这一点?

干杯

如何处理控制器/视图模型中的空数据

如果页面为空,则返回内容。类似:

public ActionResult Edit(int id)
{
    var page = Services.PageService.GetPage(id);
    if(page == null)
    {
        return Content("CANNOT FIND PAGE");
    }
    return View(page);
}

脑海中浮现出两种可能性:

  1. 显示404页面:

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

因此,基本上,这将取决于您希望在这种情况下如何向用户显示错误。