Як встановити контролер за замовчуванням у asp.net MVC 4 & MVC 5


106

Як встановити контролер за замовчуванням для свого проекту ASP.NET MVC 4, не роблячи його HomeController ?

Як я повинен налаштування по замовчуванням Area під час запуску програми?


як буде змінюватися з "/" на "/ home як кореневу сторінку? Це" / home "повинно бути видно в браузері клієнта.
Andre Mesquita

Відповіді:


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) Виберіть веб-варіант, а потім виберіть конкретну сторінку (контролер / перегляд), а потім встановіть свою сторінку входу

Тут Обліковий запис є моїм контролером, а Логін - метод моїх дій (зберігається в Контролері облікових записів)

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


15
Ваш "другий спосіб" - це те, що відбувається під час налагодження веб-проекту. Це не має нічого спільного з "контролером за замовчуванням", тобто, яка сторінка відображається під час переходу на цільову сторінку вашого сайту.
Мартін Ліверсайз

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) або макет відображений і обгорнутий навколо мого перегляду?
Gus Crawford

2
@GusCrawford Що таке "область"? Від msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx : для розміщення великих проектів ASP.NET MVC дозволяє розділяти веб-програми на менші одиниці, які називаються областями. Області надають спосіб розділити великий веб-додаток MVC на менші функціональні групи. Область фактично є структурою MVC всередині програми. Додаток може містити кілька структур (областей) MVC.
Амна Алі

Щодо іншого питання, я не думаю, що він пов'язаний з цією відповіддю, і це не здається актуальним навіть для початкового запитання. Можливо, ви повинні розмістити його десь в іншому місці.
Амна Алі

Прошу окремо у новій відповіді теми, дякую за перспективу.
Gus Crawford

2

Якщо у вас є лише один контролер і ви хочете отримати доступ до кожної дії з root, ви можете пропустити ім'я контролера, як це

routes.MapRoute(
        "Default", 
        "{action}/{id}", 
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.