Jak ustawić domyślny kontroler w asp.net MVC 4 i MVC 5

106

Jak ustawić domyślny kontroler dla mojego projektu ASP.NET MVC 4 bez tworzenia go jako HomeController ?

Jak ustawić domyślny obszar podczas uruchamiania aplikacji?

Adrian10 BEN
źródło
jak zmieniłby się z „/” na „/ home jako strona główna? To„ / home ”musi być widoczne w przeglądarce klienta.
Andre Mesquita

Odpowiedzi:

165

najlepszym sposobem jest zmiana trasy. Trasa domyślna (zdefiniowana w App_Start) ustawia/Home/Index

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

jako domyślna strona docelowa. Możesz to zmienić na dowolną trasę.

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Sales", action = "ProjectionReport", 
        id = UrlParameter.Optional }
);
Dave Alperovich
źródło
13
W MVC 4 domyślna trasa jest ustawiona w App_Start / RouteConfig.cs
Eric Labashosky
Bardzo prawdziwe. Obecnie pracuję nad projektami w obu i przeoczam te rzeczy;)
Dave Alperovich
1
Dave ma rację, ale chciałbym dodać, że w MVC 4 trasowanie nie jest już zrobione w Global.asax, ale raczej w RouteConfig.cs pod App_Start .
Good Samaritan
2
Jak to zrobić, gdy kontroler, do którego odwołuje się domyślna trasa, znajduje się w innym obszarze (tj. Nie w głównym)?
superjos
powinieneś móc ustawić trasę domyślną na"AreaName/{controller}/{action}/{id}"
Dave Alperovich
30

Ustaw poniżej kod w RouteConfig.cs w App_Start folderze

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

JEŚLI nadal nie działa, wykonaj poniższe czynności

Drugi sposób: wykonaj poniższe czynności,

1) Kliknij prawym przyciskiem myszy swój projekt

2) Wybierz Właściwości

3) Wybierz opcję Web, a następnie wybierz określoną stronę (kontroler / widok), a następnie ustaw swoją stronę logowania

Tutaj konto jest moim kontrolerem, a logowanie jest moją metodą działania (zapisane w kontrolerze konta)

Proszę spojrzeć na załączony wprowadź opis obrazu tutajzrzut ekranu.

Nimesh
źródło
15
Twoja „druga metoda” dotyczy tego, co dzieje się podczas debugowania projektu internetowego. Nie ma to nic wspólnego z „domyślnym kontrolerem”, czyli tym, jaka strona wyświetla się po przejściu na stronę docelową Twojej witryny.
Martin Liversage,
25

Nie widziałem odpowiedzi na to pytanie:

Jak ustawić domyślny obszar podczas uruchamiania aplikacji?

Oto jak skonfigurować domyślny obszar:

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" });
Amna Ali
źródło
1
świetne pytanie, dlaczego nie stworzysz go jako jednego?
stuartdotnet
Co to jest „obszar”? Jeśli zdefiniuję widok, czy przywoływany układ jest ładowany, a następnie oddzielne żądanie HTTP z danymi widoku? (tj. oddzielna operacja Ajax) czy układ jest renderowany i zawijany wokół mojego widoku?
Gus Crawford
2
@GusCrawford Co to jest „obszar”? Od msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx : Aby uwzględnić duże projekty, ASP.NET MVC umożliwia podzielenie aplikacji sieci Web na mniejsze jednostki, które są nazywane obszarami. Obszary zapewniają sposób na rozdzielenie dużej aplikacji sieci Web MVC na mniejsze grupy funkcjonalne. Obszar jest w rzeczywistości strukturą MVC wewnątrz aplikacji. Aplikacja może zawierać kilka struktur (obszarów) MVC.
Amna Ali
Jeśli chodzi o drugie pytanie, nie sądzę, aby było ono związane z tą odpowiedzią i wydaje się, że nie ma ono związku nawet z pierwotnym pytaniem. Być może powinieneś opublikować to gdzie indziej.
Amna Ali
Poproszę osobno w nowym wątku odpowiedź dzięki za perspektywę.
Gus Crawford,
2

Jeśli masz tylko jeden kontroler i chcesz uzyskać dostęp do każdej akcji na koncie root, możesz pominąć taką nazwę kontrolera

routes.MapRoute(
        "Default", 
        "{action}/{id}", 
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);
Manjoor
źródło