2012-05-23 28 views
5

De forma predeterminada, @RenderBody en _Layout.cshtml en una aplicación MVC3 apunta a ~/Views/Home/Index.Cambiar @RenderBody para que apunte a una vista diferente MVC3

@RenderBody() 

¿Dónde está este conjunto y cómo lo cambio para que apunte a ~/Views/Account/Logon? O donde quiera. Gracias

+0

La llamada '@ RenderBody' mostrará el contenido de su vista real. Debe colocarlo donde desee que esté el contenido de la vista. No está apuntando a una vista, simplemente está Representando la Vista solicitada actualmente. ¿Estás tratando de cambiar esto para renderizar la vista 'LogOn' al inicio de la aplicación? – mattytommo

Respuesta

1

no apunta a ese punto de vista, simplemente representa la vista que se da

Su aplicación se pone en marcha y se dirige a la acción por defecto en la ruta que se puede encontrar en Global.asax

Usted que puede modificar por defecto a /Account/LogOn si desea

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

Ahora obtengo un 404 cuando ejecuto la aplicación. Si ejecuto la aplicación y luego ingreso http: // localhost: 64059/Account/LogOn/user, sí estoy pasando un parámetro, aparece mi vista LogOn. Cómo lo arreglo, así que no tengo que escribir nada para que mi vista LogOn muestre – BoundForGlory

+0

Cuando se inicia la aplicación, se dirige a la acción predeterminada, en ese momento no hay 'usuario' para pasar como parámetro –

+0

Actualice su pregunta con su acción LogOn para que pueda ver cómo está pasando su 'user' –

1

RenderBody no apunta de forma predeterminada a ~/Views/Home/Index. Representa la vista que fue devuelta por la acción del controlador que se ejecutó. Y dado que en su Global.asax en la definición de enrutamiento la acción predeterminada está configurada para ser Index, es esta vista la que se representa.

Así que todo lo que tiene que hacer es modificar la configuración de enrutamiento de manera que la acción por defecto es de inicio de sesión en el controlador de cuenta:

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

Ahora cuando se desplaza a /, la acción de inicio de sesión del controlador Account será ejecutado que a su vez representará la vista ~/Views/Account/LogOn.cshtml.

+0

Realicé el cambio y cuando ejecuto la aplicación, obtengo un 404. Si ejecuto la aplicación y luego escribo http: // localhost: 64059/Account/LogOn/user, sí estoy pasando un parámetro, mi vista LogOn aparece. ¿Cómo lo arreglo, así que no tengo que escribir nada para que mi vista LogOn muestre – BoundForGlory

+0

? Eso es extraño. Si realizó el cambio y solo tiene esta configuración de ruta cuando navega a 'http: // localhost: 64059 /', esto debería ejecutar la acción LogOn en el controlador de la cuenta (suponiendo que exista esta acción). –

+0

Sí existe. Mi código se ve exactamente como el tuyo, acabo de cambiar el id a DB y eso es todo. – BoundForGlory

0

debe utilizar @RenderPage lugar. Siga este link para más información.

Cuestiones relacionadas