Как работать с нулевыми данными в модели контроллера / представления - PullRequest
0 голосов
/ 15 февраля 2012

При возврате данных из службы в действие контроллера, как лучше всего обращаться с нулевыми данными.В приведенном ниже примере я запрашиваю сервис для Page.Но если страница для этого идентификатора не существует, как мне с этим справиться?

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>

Что другие люди делают в этой ситуации?Вышеуказанная ситуация будет работать нормально, но есть ли более умный или более уважаемый способ сделать это?

Cheers

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

вернуть содержимое, если страница пуста.как:

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

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

    return View(page);
}
0 голосов
/ 15 февраля 2012
На ум приходит

2 возможностей:

  1. Отображение страницы 404:

    public ActionResult Edit(int id)
    {
        var page = Services.PageService.GetPage(id);
    
        if(page == null)
        {
            return HttpNotFound();
        }
    
        return View(page);
    }
    
  2. Если вы хотите отобразить ошибку наВ том же представлении вы можете включить свойство в модель представления, указывающее, что элемент не был найден, и проверить это свойство в соответствующем представлении.

Таким образом, в основном это будет зависеть от того, как вы хотитеошибка, которая будет представлена ​​пользователю в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...