2012-05-23 12 views
5

Standardmäßig zeigt @RenderBody in _Layout.cshtml in einer MVC3-App auf ~/Views/Home/Index.@RenderBody ändern, um auf eine andere Ansicht zu zeigen MVC3

Wo ist das eingestellt und wie kann ich es ändern, um auf ~/Views/Account/Logon zu zeigen? Oder wo ich will. Danke

+0

Der '@ RenderBody' Aufruf wird den Inhalt Ihrer aktuellen Ansicht darstellen. Sie sollten es dort platzieren, wo der Inhalt der Ansicht sein soll. Es zeigt nicht auf eine Ansicht, sondern nur auf die aktuell angeforderte Ansicht. Versuchen Sie, dies so zu ändern, dass die "LogOn" -Ansicht beim Programmstart angezeigt wird? – mattytommo

Antwort

1

Es ist nicht zu dieser Ansicht verweisen, macht es nur die Ansicht, dass es

Ihre App startet gegeben und geht auf das Routing auf die Standardaktion, die

Sie in Global.asax gefunden werden kann kann das ändern, um /Account/LogOn auf Standard, wenn Sie

public class MvcApplication : System.Web.HttpApplication { 

    public static void RegisterGlobalFilters(GlobalFilterCollection filters) { 
     filters.Add(new HandleErrorAttribute()); 
    } 

    public static void RegisterRoutes(RouteCollection routes) { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     //routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Account", action = "LogOn", id = UrlParameter.Optional } // Parameter defaults 
     ); 
    } 

    protected void Application_Start() { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 
    } 
} 
+0

Jetzt bekomme ich einen 404, wenn ich die App ausführen. Wenn ich die App starte und dann http: // localhost: 64059/Account/LogOn/user eintippe, ja wenn ich einen Parameter übergebe, erscheint meine LogOn-Ansicht. Wie repariere ich es, so dass ich nicht tippen muss, damit meine Logon-Ansicht – BoundForGlory

+0

anzeigt Wenn die App gestartet wird, wird auf die Standardaktion umgeleitet, zu diesem Zeitpunkt gibt es keinen "Benutzer", der als Parameter –

+0

übergeben werden kann Aktualisiere deine Frage mit deiner LogOn-Aktion, damit ich sehen kann, wie du deinen 'user' übergibst –

1

RenderBody zeigt standardmäßig nicht auf ~/Views/Home/Index. Es rendert die Ansicht, die von der Controlleraktion zurückgegeben wurde, die ausgeführt wurde. Und da die Standardaktion in Ihrer Global.asax in der Routingdefinition als Index konfiguriert ist, wird diese Ansicht gerendert.

Also alles, was Sie tun müssen, ist Ihre Routing-Konfiguration zu ändern, so dass die Aktion Standard Logon auf dem Konto-Controller ist:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Account", action = "LogOn", id = UrlParameter.Optional } // Parameter defaults 
); 

Nun, wenn Sie zu / navigieren, die LogOn Wirkung des Account Controller wird ausgeführt, die selbst die ~/Views/Account/LogOn.cshtml Ansicht wiedergeben wird.

+0

Ich machte die Änderung und wenn ich die App starte, bekomme ich einen 404. Wenn ich die App starte und dann http: // localhost: 64059/Account/LogOn/user eintippe, ja im übergebenen Parameter, meine LogOn-Ansicht erscheint. Wie repariere ich es, so muss ich nicht tippen, um meine Logon-Ansicht anzuzeigen – BoundForGlory

+0

Das ist komisch. Wenn Sie die Änderung vorgenommen haben und Sie nur diese Route eingerichtet haben, wenn Sie zu "http: // localhost: 64059 /" navigieren, sollte dies die LogOn-Aktion auf dem Account-Controller ausführen (vorausgesetzt, diese Aktion existiert). –

+0

Es existiert. Mein Code sieht genau wie deins aus, ich habe gerade ID in db geändert und das ist es. – BoundForGlory

0

Sie wollen stattdessen @RenderPage verwenden sollten. Befolgen Sie diese link für weitere Informationen.

Verwandte Themen