Почему Asp.Net MVC не ищет представление в моей общей папке? - PullRequest
2 голосов
/ 03 октября 2011

В моей папке /Views/Shared/ я создал вид бритвы EntityNotFound.cshtml. В одном из моих действий контроллера у меня есть следующий вызов:

return View(MVC.Shared.Views.EntityNotFound, "Company");

Это вызывает следующее исключение:

System.InvalidOperationException: представление '~ / Views / Shared / EntityNotFound.cshtml' или его мастер не найдены, или никакой механизм просмотра не поддерживает найденные местоположения. Были найдены следующие местоположения:

~ / Views / Компания / Company.cshtml

~ / Views / Компания / Company.vbhtml

~ / Views / Shared / Company.cshtml

~ / Views / Shared / Company.vbhtml

Я в замешательстве, потому что он даже не пытается найти ~/Views/Shared/EntityNotFound.cshtml. Даже если я заменю MVC.Shared.Views.EntityNotFound на "EntityNotFound", я получаю ту же ошибку.

Почему Asp.Net MVC даже не пытается найти мой общий вид?

Ответы [ 2 ]

5 голосов
/ 03 октября 2011

Посмотрите на список перегрузок для View();

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.view.aspx

В частности, когда вы передаете View(string,string);, он видит вторую строку как имя основного представления.

Что, вероятно, происходит, так это то, что он не может найти главное представление "Компания", в сообщениях об исключениях не будет указано

... или его мастер не былнайдено ...

Это означает, что он, вероятно, находит NotFoundException.cshtml, но не может правильно найти Company.cshtml, который ищет в качестве мастера.

2 голосов
/ 03 октября 2011

Правильный синтаксис должен быть таким (не передавайте путь, MVC - это язык по соглашениям)

  return View("EntityNotFound");

Предполагая, что "Компания" - это параметр, который вы хотите передать в представление, попробуйте так:

  ViewBag.ErrorEntity = "Company";
  return View("EntityNotFound");

А из вида

  <p>Entity not found: @ViewBag.ErrorEntity</p>
...