Razor View Engine не ищет локации View Area - PullRequest
5 голосов
/ 01 октября 2011

Я использую стандартную конфигурацию RazorViewEngine и Area, однако при переходе к ссылке, которая использует вид внутри области.Я получаю сообщение об ошибке, утверждающее, что представление не может быть найдено и выполнено в следующих местах:

 ~/Views/Applications/Details.cshtml
 ~/Views/Applications/Details.vbhtml 
 ~/Views/Shared/Details.cshtml
 ~/Views/Shared/Details.vbhtml

Мне показалось странным, что выглядит так, как будто механизм просмотра не пытается найти местоположение областей.Какие настройки мне нужно сделать, чтобы механизм поиска выполнял поиск видов в своей области.

Вот соответствующий код, который я использовал для определения своей области.

Global.asax.cs

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RouteRegistrar.RegisterRoutesTo(RouteTable.Routes);
}

ApplicationAreaRegistration.cs

private void RegisterRoutesTo(RouteCollection routes)
{
        routes.MapRoute("Application_default", AreaName + "/{action}/{applicationId}",
                        new
                        {
                            controller = "Applications",
                            action = "Index",                                
                            applicationDomainId = UrlParameter.Optional
                        }, new { applicationId = @"\d+" });
}

Index.cshtml

@Html.RouteLink(item.Name, "Application_default", new { applicationId = item.Id, action = "Details" })

Физическая структура каталогов

Areas \
      \Application
                  \Controllers
                              -ApplicationsController.cs
                   \Views
                         -Details.cshtml
       -ApplicationAreaRegistration.cs

Ответы [ 2 ]

3 голосов
/ 01 октября 2011

Вы уверены, что RegisterRoutesTo() в ApplicationAreaRegistration.cs вызывается?Кажется, что Маршрут к вашему региону не был зарегистрирован.

Я бы предложил переместить ваш MapRoute обратно в переопределение RegisterArea в ApplicationAreaRegistration.cs.

0 голосов
/ 01 октября 2011

Ваш MapRoute кажется проблемой.Попробуйте добавить area объявление

routes.MapRoute("Application_default", 
                 AreaName + "/{action}/{applicationId}",
                 new
                 {
                    area= "Application",
                    controller = "Applications",
                    action = "Index",                                
                   applicationDomainId = UrlParameter.Optional
                 }, 
                 new { applicationId = @"\d+" });

Кроме того, просто дважды проверьте различные перегрузки, доступные для Html.RouteLink - вы можете добавить область RouteValues collection

`new {area="Application", applicationId = item.Id, action = "Details"}` 

при использовании RouteLink вне области

...