Ustaw „Strona główna” w Asp.Net MVC

105

W asp.net MVC „strona główna” (tj. Trasa wyświetlana po wejściu na www.foo.com) jest ustawiona na Home / Index.

  • Gdzie jest przechowywana ta wartość?
  • Jak mogę zmienić „stronę główną”?
  • Czy jest coś bardziej eleganckiego niż użycie RedirectToRoute () w akcji Index kontrolera domowego?

Próbowałem grepować dla Home / Index w moim projekcie i nie mogłem znaleźć odniesienia ani nie mogłem zobaczyć niczego w IIS (6). Spojrzałem na stronę default.aspx w katalogu głównym, ale nie wyglądało to na nic trafnego.

Dzięki

NikolaiDante
źródło

Odpowiedzi:

150

Spójrz na Default.aspx/Default.aspx.csplik i Global.asax.cs

Możesz ustawić domyślną trasę:

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

Po prostu zmień nazwy kontrolerów / akcji na żądane domyślne. To powinna być ostatnia trasa w tablicy routingu.

Michael Stum
źródło
6
@NikolaiDante powinieneś uczynić ten komentarz odpowiedzią, ponieważ prawie go przegapiłem i jest szybszy niż ta odpowiedź. :) Dzięki
GazB
3
W MVC 5. jeśli masz formularz logowania, po kliknięciu zaloguj się na stronie głównej przekierowuje on do kontrolera domowego, a nie do kontrolera niestandardowego określonego w trasie. rejestracja zrobi podobnie. Więc oprócz zmiany routeconfig, trzeba również zmienić kod, w którym wywołuje się RedirectionToAction ("Index", "Home") i zastąpić go własnym kontrolerem i nazwami akcji.
anIBMer
Warto zaznaczyć, że możesz mieć wiele tras . Może to być domyślne ustawienie z parametrami BLANK URL, ale prawdopodobnie potrzebujesz drugiej trasy, takiej jak url: "{controller}/{action}/{id}". Po prostu nadaj trasom różne nazwy.
Jess
Ta odpowiedź może Ci pomóc, ale jeśli potrzebujesz wielu tras, zobacz tutaj stackoverflow.com/a/8470531/1804678
Jess
1
Ta odpowiedź jest odpowiednia tylko dla MVC 3 i wcześniejszych. Zobacz moją odpowiedź poniżej na zalecane podejście MVC 4 i później.
JTW,
19

ASP.NET Core

Routing jest konfigurowany w Configuremetodzie Startupklasy. Aby ustawić „stronę główną”, wystarczy dodać następujące elementy. Spowoduje to przekierowanie użytkowników do kontrolera i akcji zdefiniowanej w metodzie MapRoute, gdy / jeśli przejdą do podstawowego adresu URL Twojej witryny, tj. Twoja_witryna.com przekieruje użytkowników do twoja_witryna.com/foo/index:

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

Pre-ASP.NET Core

Użyj metody RegisterRoutes znajdującej się w App_Start / RouteConfig.cs (MVC 3 i 4) lub Global.asax.cs (MVC 1 i 2), jak pokazano poniżej. Spowoduje to przekierowanie użytkowników do kontrolera i akcji zdefiniowanej w metodzie MapRoute, jeśli przejdą do podstawowego adresu URL Twojej witryny, tj. Twoja_witryna.com skieruje użytkownika do twoja_witryna.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
źródło
5

Krok 1: Kliknij plik Global.asax w swoim rozwiązaniu.

Krok 2: Następnie przejdź do definicji

RouteConfig.RegisterRoutes(RouteTable.Routes);

Krok 3: Zmień nazwę kontrolera i nazwę widoku

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 }
                        );
    }
}
Ankur Shah
źródło
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 }
        );
    }
}
Niraj
źródło
3

sprawdź metodę RegisterRoutes w global.asax.cs - to domyślne miejsce do konfiguracji tras ...

Michał Chaniewski
źródło
2

Routing atrybutów w MVC 5

Przed MVC 5 można było mapować adresy URL do określonych akcji i kontrolerów, wywołując routes.MapRoute(...)plik RouteConfig.cs. Tutaj jest przechowywany adres URL strony głównej ( Home/Index). Jeśli jednak zmodyfikujesz trasę domyślną, jak pokazano poniżej,

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

pamiętaj, że wpłynie to na adresy URL innych akcji i kontrolerów. Na przykład, jeśli masz nazwaną klasę kontrolera ExampleControlleri wywołano w niej metodę akcji DoSomething, oczekiwany domyślny adres URL ExampleController/DoSomethingnie będzie już działać, ponieważ domyślna trasa została zmieniona.

Obejściem tego problemu jest uniknięcie bałaganu z domyślną trasą i utworzenie nowych tras w pliku RouteConfig.cs dla innych akcji i kontrolerów, takich jak ten,

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 }
);

Teraz DoSomethingakcja ExampleControllerklasy zostanie odwzorowana na adres URL hey/now. Ale może to być nudne za każdym razem, gdy chcesz zdefiniować trasy dla różnych działań. Tak więc w MVC 5 możesz teraz dodawać atrybuty, aby dopasować adresy URL do takich działań,

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();
    }
}
Chris Gong
źródło
1

Spróbowałem odpowiedzi, ale to nie zadziałało. Oto, co ostatecznie zrobiłem:

Utwórz nowy kontroler DefaultController. W akcji index napisałem przekierowanie jednej linii:

return Redirect("~/Default.aspx")

W RouteConfig.cs zmień kontroler = „Default” dla trasy.

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
vickey1611
źródło
prawdopodobnie zapomniałeś pominąć słowa "kontroler" w nazwie kontrolera, tworząc domyślną trasę
amarax
0

Jeśli nie chcesz zmieniać routera, po prostu przejdź do HomeController i zmień MyNewViewHere w indeksie w następujący sposób:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
Martin Kei
źródło