2012-02-15 3 views
0

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

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> 

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

Приветствия

+1

По-моему, это полностью зависит от того, что * вы хотите сделать * при возникновении ошибки. Если в этом случае вы хотите отобразить «НЕ НАЙДИТЕ СТРАНИЦУ», то я не вижу ничего плохого в вашем подходе. Кроме того, что я лично передал бы null и проверил бы null в представлении. –

ответ

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. Если вы хотите, чтобы отобразить сообщение об ошибке на ту же точку зрения можно включать свойство на вашей модели просмотра, указывающее, что элемент не найден и не проверен на это свойство в соответствующем представлении.

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

Смежные вопросы