При возврате данных формируется сервис в действие контроллера, что является лучшим способом обработки нулевых данных. В приведенном ниже примере я запрашиваю службу для страницы. Но если страница для этого идентификатора не существует, как мне с этим бороться?Как обращаться с нулевыми данными в модели контроллера/представления
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>
Что делают ли другие люди в этой ситуации? Вышеупомянутая ситуация будет работать нормально, но есть ли более умный или более хорошо известный способ сделать это?
Приветствия
По-моему, это полностью зависит от того, что * вы хотите сделать * при возникновении ошибки. Если в этом случае вы хотите отобразить «НЕ НАЙДИТЕ СТРАНИЦУ», то я не вижу ничего плохого в вашем подходе. Кроме того, что я лично передал бы null и проверил бы null в представлении. –