Как установить контроллер по умолчанию в asp.net MVC 4 и MVC 5

106

Как мне установить контроллер по умолчанию для моего проекта ASP.NET MVC 4, не делая его HomeController ?

Как я должен настройки по умолчанию Area при запуске приложения?

Адриан10 БЕН
источник
как будет изменение с «/» на «/ home» в качестве корневой страницы? Этот «/ home» должен быть виден в браузере клиента.
Андре Мескита,

Ответы:

165

лучший способ - изменить свой маршрут. Маршрут по умолчанию (определенный в вашем App_Start) устанавливает/Home/Index

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);

в качестве целевой страницы по умолчанию. Вы можете изменить его на любой желаемый маршрут.

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Sales", action = "ProjectionReport", 
        id = UrlParameter.Optional }
);
Дэйв Альперович
источник
13
В MVC 4 маршрут по умолчанию установлен в App_Start / RouteConfig.cs
Эрик Лабашоски
Совершенно верно. Я сейчас работаю над проектами в обоих направлениях и не замечаю этих вещей;)
Дэйв Альперович
1
Дэйв прав, но я хотел бы добавить, что в MVC 4 маршрутизация больше не выполняется в Global.asax, а в RouteConfig.cs в App_Start .
Добрый самаритянин,
2
Как заставить это работать, когда контроллер, на который есть ссылка в маршруте по умолчанию, находится в другой области (т.е. не в корневой)?
superjos
у вас должна быть возможность сделать маршрут по умолчанию"AreaName/{controller}/{action}/{id}"
Дэйв Альперович
30

Установите ниже код в RouteConfig.cs в папке App_Start

public static void RegisterRoutes(RouteCollection routes)
{
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 routes.MapRoute(
 name: "Default",
 url: "{controller}/{action}/{id}",
 defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional });
}

ЕСЛИ все еще не работает, выполните следующие действия.

Второй способ: вы просто выполните следующие шаги,

1) Щелкните правой кнопкой мыши свой проект

2) Выберите Свойства

3) Выберите опцию Интернет, затем выберите конкретную страницу (контроллер / представление), а затем установите страницу входа в систему.

Здесь Account - мой контроллер, а Login - мой метод действия (сохраненный в Account Controller)

Пожалуйста, посмотрите прикрепленный введите описание изображения здесьскриншот.

Нимеш
источник
15
Ваш «второй способ» - это то, что происходит при отладке вашего веб-проекта. Это не имеет ничего общего с «контроллером по умолчанию», то есть с тем, какая страница отображается, когда вы переходите на целевую страницу вашего сайта.
Martin Liversage
25

Я не видел ответа на этот вопрос:

Как я должен настройки по умолчанию Area при запуске приложения?

Итак, вот как вы можете настроить область по умолчанию:

var route = routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    ).DataTokens = new RouteValueDictionary(new { area = "MyArea" });
Амна Али
источник
1
отличный вопрос, почему бы вам не создать его как единое целое?
stuartdotnet
Что такое «Площадь»? Если я определяю представление, загружается ли ссылочный макет, а затем отдельный HTTP-запрос с данными моего представления? (т.е. отдельная операция Ajax) или макет отображается и обертывается вокруг моего представления?
Гас Кроуфорд
2
@GusCrawford Что такое "Площадь"? Из msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx : Для размещения крупных проектов ASP.NET MVC позволяет раздел веб - приложений на более мелкие единицы, которые упоминаются в качестве областей. Области позволяют разделить большое веб-приложение MVC на более мелкие функциональные группы. Область - это фактически структура MVC внутри приложения. Приложение может содержать несколько структур (областей) MVC.
Амна Али
Что касается другого вопроса, я не думаю, что он связан с этим ответом, и не кажется актуальным даже для исходного вопроса. Может, стоит выложить где-нибудь еще.
Амна Али
Я спрошу отдельно в новой ветке ответа, спасибо за перспективу.
Гас Кроуфорд
2

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

routes.MapRoute(
        "Default", 
        "{action}/{id}", 
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);
Manjoor
источник