2013-08-07 1 views
3

Как я могу это сделать по-другому?Render error view, когда мы сталкиваемся с исключением

public ActionResult SomeAction(int id) 
{ 
    try 
    {    
     var model = getMyModel(id); 
     return View(model); 
    } 
    catch(Exception e) 
    { 
     var NotFoundViewModel = new NotFoundViewModel { Some Properties }; 
     return View("~/Views/Shared/NotFound.cshtml", NotFoundViewModel); 
    } 
} 

Исключение будет выбрано для URL-адреса Controller/SomeAction/NotFoundId. Ненавижу иметь в проекте что-то вроде: ~/Views/Shared/NotFound.cshtml.

+0

дубликат http://stackoverflow.com/questions/2948484/how-to-get-mvc-action-to-return-404 – Kaido

+1

Просто верните 404? в конце концов * не найден *. –

ответ

4

Я понимаю, что этот вопрос несколько лет, но я полагал, что я хотел бы добавить к принятому ответу. Следуя рекомендациям CodeCaster об использовании стандартного «Error.cshtml» в качестве файла (представления) для работы в качестве вашей общей страницы ошибок, я рекомендую вам позволить структуре MVC выполнять остальную работу за вас.

Если вы поместите файл Error.cshtml в общую папку в проекте MVC, вам не нужно явно указывать путь к представлению. Вы можете переписать код так:

public ActionResult SomeAction(int id) 
{ 
    try 
    {    
     var model = getMyModel(id); 
     return View(model); 
    } 
    catch(Exception e) 
    { 
     var NotFoundViewModel = new NotFoundViewModel { Some Properties }; 
     return View("Error", NotFoundViewModel); 
    } 
} 

На самом деле, я заметил, что если поставить явный путь и запуска Visual Studio IIS Express на локальном компьютере, иногда не в состоянии найти файл и отобразить общее сообщение 404 :(

1

Сделайте это "~/Views/Shared/Error.cshtml", который отображает общую модель ошибки с заголовком и сообщением?

+1

Это выглядит хорошо. У меня должен быть контроллер ошибок, поэтому я могу вернуть RedirectToAction с помощью NotFoundAction и моего NotFoundViewModel в качестве параметров. И в NotFoundAction я покажу свой NotFoundView. Это нормально? –

+2

, что полностью здорово. –

+1

Или взгляните на [этот вопрос] (http://stackoverflow.com/questions/11851328/how-is-error-cshtml-called-in-asp-net-mvc). – CodeCaster

1

Вы можете вернуть HttpNotFoundResult объект как:

catch(Exception e) 
{ 
    return new HttpNotFoundResult(); 
} 

или

catch(Exception e) 
{ 
    return HttpNotFound("ooops, there is no page like this :/"); 
} 
Смежные вопросы