asp.net - route - partial views asp net mvc
Me aparece una página en blanco al implementar la aplicación MVC en IIS (9)
Actualmente estoy implementando mi aplicación creada usando RC de MVC ASP.NET en el servidor de producción que ahora no muestra nada. Las rutas en mi global.ascx son típicas, es decir,
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
¿Alguien puede descubrir por qué me muestra solo páginas en blanco?
Perdón por olvidar mencionar que es IIS 6
Curiosamente, también está trabajando en mi IIS local (es decir, tanto integrado localmente con VS como con XP).
¿Cuál es el entorno del servidor? Si no es IIS7 / Server 2008, hay otros ajustes que debe hacer para que el enrutamiento funcione correctamente, aunque si ese es el caso, probablemente obtenga una página de error, no una página en blanco.
Si es el servidor de producción el que está teniendo el problema, probablemente sean los permisos de rol. Debe asegurarse de que todas las carpetas y archivos que utiliza su aplicación permitan leer (y en algunos casos escribir si usa registros) la identidad de rol que está utilizando IIS.
Por lo general, la identidad que IIS está utilizando se encuentra en Propiedades del sitio web -> Seguridad del directorio -> Editar (Autenticación y control de acceso). Si no desea permitir que ninguna computadora en su red acceda al sitio web, probablemente debería desactivar "Habilitar el acceso anónimo". Sin embargo, si quiere permitir esto, esta será la identidad a la que debe dar acceso en sus carpetas y archivos de aplicaciones web. De lo contrario, es posible que deba otorgar acceso a la función que contiene las identidades de usuario a las que desea acceder.
¿Tiene controladores y módulos HTTP definidos en web.config en el servidor de producción?
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
<add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
En IIS6, las URL deben contener .mvc (por ejemplo, /Products.mvc/ListAll). Consulte estas guías para conocer la configuración correcta de IIS 6 y la solución de extensión .mvc:
Desde el punto de vista que esperaría que la primera ruta funcionaría si fueras a una url como /Home.aspx pero si solo vas a la / url, entonces ASP.net no sabe cómo manejar la URL. Intentará coincidir en páginas predeterminadas de IIS como index.html, default.aspx, index.aspx, etc. Si no se encuentra nada, la solicitud no llega a ningún lado. Al tratar de crear un archivo default.aspx (o cualquier otro archivo de índice en la ruta), en la página_carga, realice una response.redirect("~/Home.aspx")
.
Si eso no funciona, verificaría esta fuente . Una de las principales razones por las que IIS 6 y MVC no funcionan bien es que IIS 6 de forma predeterminada no tiene el comodín * asignado al ASP.net dll.
Estoy seguro de que es una forma de configurar el servidor del producto. ¿Puede hacer alguna comparación entre su instancia de XP y su producción?
Resolví el problema, el problema principal eran las diferentes versiones del framework MVC. Production Server estaba teniendo MVC Beta mientras tenía instalado MVC RC1. Así que tan pronto como instalé el RC1 en el servidor y corrí las secuencias de comandos de la extensión de mvc, todo funcionó. Gracias por su ayuda.
También obtendrá una página en blanco cuando tenga una configuración de manejo de errores en su archivo.asax global y algo genérico sea incorrecto (como un ensamblaje que no pudo ser encontrado).
Cuando lo deshabilita en global.asax, puede ver el error del servidor. No olvides habilitarlo de nuevo después de corregir esos errores iniciales.
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "ErrorController");
routeData.Values.Add("action", "HandleTheError");
routeData.Values.Add("error", exception);
Response.Clear();
Server.ClearError();
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(
new HttpContextWrapper(Context), routeData));
}
La página en blanco se muestra cuando ocurren errores en lugares específicos, en mi caso fue una excepción MethodNotFoundException ...
Para ver el error, asegúrese de habilitar los servicios "Errores HTTP" y "Redirección HTTP" en el rol "Servidor web (IIS)".
Normalmente cuando obtengo esto, es porque olvidé agregar lo siguiente en Web.config al implementar en IIS6 después de desarrollar en IIS7 (o el IIS Express 7 que viene con Visual Studio):
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
Esto significa que tiene una excepción lanzada en su aplicación MVC, pero es probable que tenga una clase en su MVC que capture, filtre y oculte esas excepciones. Esas excepciones todavía se lanzan, pero no se puede ver lo que las está causando. MVC aún redirige la solicitud de página pero no devuelve nada debido a las excepciones ocultas. No puedes detener el problema hasta que veas las excepciones lanzadas. No puede ver las excepciones en la página web hasta que desactive los filtros de entrega de MVC.
Una cosa que podría impedirle ver las excepciones es un GlobalFilterCollection llamado a través de un filtro MVC en el archivo global.asax cuando el sitio web se carga por primera vez. Normalmente puede encontrar estas llamadas en el archivo Global.asax. Ese archivo generalmente llama al objeto HttpApplication cuando el sitio web primero carga y sus eventos. En sus eventos, se carga en las rutas MVC predeterminadas que los desarrolladores agregan, pero también puede cargar filtros que procesan el manejo de excepciones en todo el sitio. Los desarrolladores a menudo incluyen el manejo de excepciones a través de filtros en global.asax pensando que están manejando inteligentemente excepciones y problemas del usuario, pero que es un error. Si encuentra un filtro, simplemente coméntelo. De repente, todos tus errores volverán a aparecer en tu página HTML una vez que lo hagas.
¡Entonces puede solucionar el problema! ¡Buena suerte!