2012-05-23 13 views
5

Per impostazione predefinita, @RenderBody in _Layout.cshtml in un'app MVC3 fa riferimento a ~/Views/Home/Index.Cambia @RenderBody in modo che punti a un'altra vista MVC3

Dove si trova questo set e come si modifica in modo che punti a ~/Views/Account/Logon? O ovunque io voglia. Grazie

+0

La chiamata '@ RenderBody' renderà il contenuto della vista attuale. Dovresti metterlo dove vuoi che sia il contenuto della vista. Non punta a una vista, è semplicemente Rendering della Vista attualmente richiesta. Stai cercando di cambiarlo per rendere avviata la vista 'LogOn' sull'applicazione? – mattytommo

risposta

1

Esso non punta a questo punto di vista, si limita rende l'idea che si è dato

La vostra applicazione si avvia e va a l'azione predefinita sul percorso che può essere trovato in Global.asax

È può modificare che di default per /Account/LogOn se lo si desidera

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

Ora ottengo un 404 quando eseguo l'app. Se eseguo l'app, digito http: // localhost: 64059/Account/LogOn/user, sì sto passando un parametro, viene visualizzata la mia vista LogOn. Come posso aggiustarlo quindi non devo fare alcun tipo di digitazione in modo che la mia vista LogOn mostri – BoundForGlory

+0

Quando la tua app si avvia, si dirige verso l'azione predefinita, in quel momento non c'è nessun 'utente' da passare come parametro –

+0

Aggiorna la tua domanda con la tua azione LogOn così posso vedere come stai passando il tuo utente ' –

1

RenderBody non punta automaticamente su ~/Views/Home/Index. Rappresenta la vista restituita dall'azione del controller che è stata eseguita. E poiché nel tuo Global.asax nella definizione di routing l'azione predefinita è configurata come Index, è questa visualizzazione che viene renderizzata.

Quindi tutto quello che dovete fare è modificare la configurazione di routing in modo che l'azione di default è di accesso sul controller Account:

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

Ora, quando si passa a /, l'azione di accesso del regolatore Account sarà eseguito che a sua volta renderà la vista ~/Views/Account/LogOn.cshtml.

+0

Ho apportato la modifica e quando eseguo l'app, ottengo un 404. Se eseguo l'app, digito http: // localhost: 64059/Account/LogOn/utente, sì sto passando un parametro, la mia vista LogOn appare. Come posso risolvere il problema in modo da non dover eseguire alcuna digitazione in modo che la mia vista LogOn mostri – BoundForGlory

+0

Questo è strano. Se hai apportato la modifica e hai solo questa configurazione di percorso quando navighi a 'http: // localhost: 64059 /', questo dovrebbe eseguire l'azione LogOn sul controller Account (supponendo che questa azione esista). –

+0

Esiste. Il mio codice sembra esattamente come il tuo, ho appena cambiato id in db e questo è tutto. – BoundForGlory

0

si dovrebbe usare @RenderPage invece. Segui questo link per ulteriori informazioni.

Problemi correlati