13

Я пытаюсь установить URL-адрес по умолчанию моего приложения MVC для представления в области моего приложения. Этот район называется «Общие», контроллер «Главная» и вид «Индекс».ASP.NET MVC URL-адрес по умолчанию View

Я попытался установить defaultUrl в разделе форм web.config на «~/Common/Home/Index» без успеха.

Я также попытался отображение нового маршрута в global.asax, таким образом:

routes.MapRoute(
     "Area", 
     "{area}/{controller}/{action}/{id}", 
     new { area = "Common", controller = "Home", action = "Index", id = "" } 
    ); 

снова, но безрезультатно.

+1

При дальнейшем исследовании, представляется, что в запросе направляется на правильный контроллер (т. е. MyApp.Areas.Common.Controllers.HomeController) с вашим предложенным изменением или без него. Однако в обоих случаях ViewEngine ищет только файлы ~/Views/Home и ~/Views/Shared, а не начиная с ~/Areas/Common/Views/Home и ~/Areas/Common/Views/Shared. Как ни странно, если я создаю страницу с ActionLink для одного и того же метода контроллера (т. Е. Index()), то он работает нормально. Хммм. –

+0

http://stackoverflow.com/questions/2140208/how-to-set-a-default-route-to-an-area-in-mvc Это может помочь. У меня была аналогичная проблема. – LiamB

ответ

12

маршрут вы перечислили только работает, если они явно тип из URL:

yoursite.com/{area}/{controller}/{action}/{id} 

Что это маршрут говорит,:

Если я получаю запрос, который имеет действующий {area}, действительный {controller} в эту область и действительный {action} в этом контроллере, затем проложите туда.

Что вы хотите, чтобы по умолчанию этого контроллера, если они просто посетить ваш сайт, yoursite.com:

routes.MapRoute(
    "Area", 
    "", 
    new { area = "Common", controller = "Home", action = "Index" } 
); 

Что это говорит о том, что если они ничего не добавляет к http://yoursite.com то, чтобы направить его на следующее действие: Common/Home/Index

Кроме того, положите его в верхней части таблицы маршрутов.

Делает, что вы также позволить MVC знать, чтобы зарегистрировать области, которые есть в программе:

Вставьте следующий в методе Application_Start в Global.asax.cs файле:

AreaRegistration.RegisterAllAreas(); 
+1

Для меня это поиск в корневом файле, а не в области. – FrenkyB

0

Что вы делать кажется правильным. Если бы я должен был догадаться, я бы сказал, что это происходит из-за того, как вы управляете своим сайтом. В Visual Studio, если у вас есть определенное представление, выбранное при нажатии F5, это представление будет начальным URL-адресом - попробуйте выбрать проект, а затем нажать F5?

+0

Боюсь, что это не причина проблемы. Спасибо за ваше предложение. –

+0

Стоит попробовать: D –

7

То, что вы должны сделать, это:

  • Удалить По умолчанию маршрут от Global.asax.cs

    //// default route map will be create under area 
    //routes.MapRoute(
    // name: "Default", 
    // url: "{controller}/{action}/{id}", 
    // defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    //); 
    
  • Update SecurityAreaRegistration.cs в области общего

  • Добавить следующий маршрут картографирование:

    context.MapRoute(
        "Default", 
        "", 
        new { controller = "Home", action = "Index", id = "" } 
    ); 
    
0

В Global.asax удалить.MapRoute

и сделать его похожим на

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
} 

затем под yourareaAreaRegistration.cs района (его там, если вы добавили область через VS)

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    //This is the key one   
    context.MapRoute("Root", "", new { controller = "Home", action = "Login" }); 

    //Add more MapRoutes if needed 
} 
Смежные вопросы