Просмотр URL-адреса по умолчанию в ASP.NET MVC

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

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

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

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

Опять безрезультатно.


person Oundless    schedule 05.01.2010    source источник
comment
При дальнейшем исследовании выясняется, что запрос направляется правильному контроллеру (например, MyApp.Areas.Common.Controllers.HomeController) с предложенным вами изменением или без него. Однако в обоих случаях ViewEngine выполняет поиск только в папках ~ / Views / Home и ~ / Views / Shared, а не начинает с ~ / Areas / Common / Views / Home и ~ / Areas / Common / Views / Shared. Как ни странно, если я создаю страницу с ActionLink для того же метода контроллера (например, Index ()), то она работает нормально. Хм.   -  person Oundless    schedule 06.01.2010
comment
stackoverflow.com/questions/2140208/ Это может помочь. У меня была аналогичная проблема.   -  person LiamB    schedule 11.02.2010


Ответы (4)


Указанный вами маршрут работает только в том случае, если они явно вводят 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();
person George Stocker    schedule 05.01.2010
comment
Для меня это поиск в корневом файле, а не в области. - person FrenkyB; 29.06.2016

Что вам нужно сделать:

  • Удалить маршрут по умолчанию из 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 }
    //);
    
  • Обновите SecurityAreaRegistration.cs в области Common

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

     context.MapRoute(
        "Default",
        "",
        new { controller = "Home", action = "Index", id = "" }
    );
    
person user279993    schedule 24.02.2010

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

person Jaco Pretorius    schedule 05.01.2010
comment
Боюсь, проблема не в этом. Спасибо за ваше предложение. - person Oundless; 06.01.2010

В 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
}
person Egli Becerra    schedule 12.03.2012