2016-04-28 8 views
0

Bitte Ich muss geführt werden, um eine Standardaktion für meine Controller zu setzen, so dass, wenn keine Aktion in einem Controller angezeigt wird, die Anwendung an die Indexaktion auf dem gegebenen Controller weitergeleitet wird. Wenn beispielsweise jemand zum Dashboard navigiert/ohne die Aktion anzuzeigen, führt die Anwendung automatisch die Indexaktion des Dashboard-Controllers aus.ASP.NET MVC Set default controller action

Das folgende zeigt meine Versuche, aber es funktioniert immer noch nicht.

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 = "Account", action = "Login", id = UrlParameter.Optional } 
    ); 
    routes.MapRoute(
     name: "Regular", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Login", id = UrlParameter.Optional } 
    ); 
    routes.MapRoute(
     name: "ControllerDefault", 
     url: "{controller}", 
     defaults: new { action = "Index"} 
    ); 
    } 
} 

werde ich jede Führung schätzen

+1

Zuerst überprüft MVC Routing die Routen in der Reihenfolge, in der sie hinzugefügt werden. Die ersten beiden Routen in Ihrem Code haben genau die gleiche Konfiguration, so dass die Route "Regular" niemals erreicht wird und auch nicht die dritte, die in den obigen Routen enthalten ist. Ich schlage vor, dass wenn Sie auf eine Login-Seite umleiten möchten, wenn jemand auf Ihre Website eingibt, tun Sie es von einem Authentifizierungsfilter, und verwenden Sie das Routing nicht, da es nicht der Zweck ist. – Balde

+0

Mein Problem ist nicht das Setzen eines Standard-Controllers. Es stellt vielmehr eine Standardmethode für jeden Controller ein. Ich möchte die Indexmethode in einem beliebigen Controller aufrufen, wenn keine Methode angegeben ist. Das ist, was ich suche – Josh

+1

Verwenden Sie dann die Standardroute, die MVC-Vorlage bietet. Michael Berezin hat es in seiner Antwort gepostet. – Balde

Antwort

1

Sie anderen Weg haben auf der gleichen URL Recht, zum Laufen zu bringen. Sie müssen nur die Standardroute verwenden.

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

Sie können "Home" zu "Dashboard" ändern, wenn das Ihr Standard-Controller ist.

+0

Mein Problem ist nicht einen Standard-Controller zu setzen. Es stellt vielmehr eine Standardmethode für jeden Controller ein. Ich möchte die Indexmethode in einem beliebigen Controller aufrufen, wenn keine Methode angegeben ist. – Josh

+3

Diese Route tut das. Die Definition der Route lautet: Wenn {Controller} leer ist, verwenden Sie "Home" Wenn {action} leer ist, verwenden Sie "index" , wenn {id} Wert im ID-Parameter platziert hat. für jede URL, die nur den Namen des Controllers hat, sollte die Anfrage die Indexaktion gehen. –

+0

Oh! Vielen Dank. Es funktionierte!!! – Josh