Установите «Домашнюю страницу» в Asp.Net MVC

105

В asp.net MVC для «домашней страницы» (т. Е. Маршрута, который отображается при переходе на www.foo.com) установлено значение Home / Index.

  • Где хранится это значение?
  • Как я могу изменить "домашнюю страницу"?
  • Есть ли что-нибудь более элегантное, чем использование RedirectToRoute () в действии Index домашнего контроллера?

Я попробовал использовать grepping для Home / Index в своем проекте и не смог найти ссылку, а также ничего не увидел в IIS (6). Я посмотрел на страницу default.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 («Index», «Home»), и заменить его собственными именами контроллера и действий.
anIBMer 02
Стоит отметить, что у вас может быть несколько маршрутов . Это может быть ваш параметр по умолчанию с ПУСТОЙ URL-адресом, но вам, вероятно, понадобится второй маршрут, например url: "{controller}/{action}/{id}". Просто дайте маршрутам разные имена.
Джесс
Этот ответ может сработать для вас, но если вам нужно несколько маршрутов, см. Здесь stackoverflow.com/a/8470531/1804678
Джесс,
1
Этот ответ подходит только для MVC 3 и ранее. См. Мой ответ ниже для рекомендуемого подхода MVC 4 и более поздних версий.
JTW
19

ASP.NET Core

Маршрутизация настраивается в Configureметоде Startupкласса. Чтобы установить «домашнюю страницу», просто добавьте следующее. Это приведет к тому, что пользователи будут перенаправлены на контроллер и действие, определенное в методе MapRoute, когда / если они перейдут на базовый URL-адрес вашего сайта, то есть yoursite.com будет перенаправлять пользователей на yoursite.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-адрес вашего сайта, то есть yoursite.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 }
    );
}
JTW
источник
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 измените controller = "Default" для маршрута.

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
vickey1611
источник
Вы, вероятно, забыли опустить слово «Контроллер» в названии контроллера, создавая маршрут по умолчанию
amarax 08
0

Если вы не хотите менять роутер, просто перейдите в HomeController и измените MyNewViewHere в индексе следующим образом:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
Мартин Кей
источник