Встановіть "Домашня сторінка" в MVC


105

У asp.net MVC "домашня сторінка" (тобто маршрут, який відображається при натисканні на www.foo.com) встановлюється на Home / Index.

  • Де зберігається це значення?
  • Як я можу змінити "домашню сторінку"?
  • Чи є щось більш елегантне, ніж використовувати RedirectToRoute () в дії Index домашнього контролера?

Я спробував приєднатися до дому / індексу в своєму проекті, і не міг знайти посилання, і я не міг нічого побачити в IIS (6). Я переглянув сторінку root.aspx у корені, але, здається, нічого не викликає.

Дякую

Відповіді:


150

Подивіться на Default.aspx/Default.aspx.csта Global.asax.cs

Ви можете встановити маршрут за замовчуванням:

        routes.MapRoute(
            "Default", // Route name
            "",        // URL with parameters
            new { controller = "Home", action = "Index"}  // Parameter defaults
        );

Просто змініть імена контролера / дії на потрібний за замовчуванням. Це повинен бути останній маршрут у таблиці маршрутів.


6
@NikolaiDante, ви повинні зробити цей коментар відповіддю, оскільки я його майже не пропустив, і це швидше, ніж ця відповідь. :) Дякую
ГазБ

3
У MVC 5. якщо у вас є логін форми, коли ви натискаєте логін на домашній сторінці, він все одно перенаправлятиметься на домашній контролер, а не на ваш власний контролер, вказаний у маршруті. реєстрація дій зробить подібну дію. Тому, крім зміни routeconfig, також потрібно змінити деякий код, коли викликає RedirectionToAction ("Індекс", "Домашня сторінка") і замінити його власним контролером та іменами дій.
anIBMer

Варто зазначити, що у вас може бути кілька маршрутів . Це може бути за замовчуванням з параметрами URL-адреси BLANK, але ви, мабуть, хочете, як-от другий маршрут url: "{controller}/{action}/{id}". Просто дайте маршрутам різні назви.
Джесс

Ця відповідь може допомогти вам, але якщо вам потрібні кілька маршрутів, дивіться тут stackoverflow.com/a/8470531/1804678
Jess

1
Ця відповідь підходить лише для MVC 3 та новіших версій. Дивіться мою відповідь нижче щодо рекомендованого MVC 4 та пізнішого підходу.
JTW

19

ASP.NET Core

Маршрутизація налаштована в Configureметоді Startupкласу. Щоб встановити "домашню сторінку", просто додайте наступне. Це призведе до перенаправлення користувачів на контролер та дії, визначені методом MapRoute, коли / якщо вони перейдуть до базової URL-адреси вашого веб-сайту, тобто, сайт vašite.com буде перенаправляти користувачів на сайт vašite.com/foo/index:

app.UseMvc(routes =>
{
   routes.MapRoute(
   name: "default",
   template: "{controller=FooController}/{action=Index}/{id?}");
});

Pre-ASP.NET Core

Використовуйте метод RegisterRoutes, розташований у App_Start / RouteConfig.cs (MVC 3 і 4) або Global.asax.cs (MVC 1 і 2), як показано нижче. Це призведе до перенаправлення користувачів на контролер та дії, визначені методом MapRoute, якщо вони перейдуть до базової URL-адреси вашого веб-сайту, тобто, сайт vašite.com буде перенаправляти користувача до yoursite.com/foo/index:

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

    // Here I have created a custom "Default" route that will route users to the "YourAction" method within the "FooController" controller.
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "FooController", action = "Index", id = UrlParameter.Optional }
    );
}

5

Крок 1. Клацніть на файл Global.asax у своєму рішенні.

Крок 2: Потім перейдіть до визначення "

RouteConfig.RegisterRoutes(RouteTable.Routes);

Крок 3: Змінення імені контролера та перегляду імені

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

        routes.MapRoute(name: "Default",
                        url: "{controller}/{action}/{id}",
                        defaults: new { controller = "Home", 
                                        action = "Index", 
                                        id = UrlParameter.Optional }
                        );
    }
}

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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",               
            defaults: new { controller = "Your Controller", action = "Your Action", id = UrlParameter.Optional }
        );
    }
}

3

перевірити метод RegisterRoutes в global.asax.cs - це місце за замовчуванням для конфігурації маршруту ...


2

Маршрутизація атрибутів у MVC 5

Перед MVC 5 можна було вказати URL-адреси на конкретні дії та контролери, зателефонувавши routes.MapRoute(...)у файл RouteConfig.cs. Тут зберігається URL-адреса домашньої сторінки ( Home/Index). Однак якщо ви змінили маршрут за замовчуванням, як показано нижче,

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

майте на увазі, що це вплине на URL-адреси інших дій та контролерів. Наприклад, якщо у вас був названий клас контролера, ExampleControllerа всередині нього викликався метод дії DoSomething, тоді очікувана URL-адреса за замовчуванням ExampleController/DoSomethingбільше не працюватиме, оскільки маршрут за замовчуванням було змінено.

Вирішенням цього є не возитися з маршрутом за замовчуванням та створювати нові маршрути у файлі RouteConfig.cs для інших дій та контролерів, таких як,

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
    name: "Example",
    url: "hey/now",
    defaults: new { controller = "Example", action = "DoSomething", id = UrlParameter.Optional }
);

Тепер DoSomethingдія ExampleControllerкласу буде відображено у URL-адресі hey/now. Але це може зробити стомлюючим кожен раз, коли ви хочете визначити маршрути для різних дій. Тож у MVC 5 тепер можна додавати атрибути, щоб відповідати URL-адресам таким діям,

public class HomeController : Controller
{
    // url is now 'index/' instead of 'home/index'
    [Route("index")]
    public ActionResult Index()
    {
        return View();
    }
    // url is now 'create/new' instead of 'home/create'
    [Route("create/new")]
    public ActionResult Create()
    {
        return View();
    }
}

1

Я спробував відповісти, але це не спрацювало. Ось що я закінчив робити:

Створіть новий контролер DefaultController. В індексній дії я написав переадресацію одного рядка:

return Redirect("~/Default.aspx")

У RouteConfig.cs змініть контролер = "За замовчуванням" для маршруту.

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );

ви, мабуть, забули опустити слово "Контролер" на ім'я контролера, створивши маршрут за замовчуванням
amarax

0

Якщо ви не хочете змінювати маршрутизатор, просто перейдіть на HomeController і змініть MyNewViewHere в індексі, як це:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.