Pregunta

Estoy agregando MVC a un proyecto que tiene MUCHAS páginas de formularios web heredados. Esto funciona bien Sin embargo, actualmente tengo una página maestra separada para MVC y para los formularios web. Las dos páginas maestras producen resultados esencialmente idénticos. Realmente me gustaría matar a los formularios web y usar la página maestra MVC con todas mis páginas y mantenerme SECO.

No estar SECO ya me ha mordido un par de veces cuando olvidé cambiar ambos.

Traté de hacer lo obvio y solo apunte el atributo MasterPage de la página de contenido del formulario web en la página maestra MVC. Esto arroja un error que dice que los maestros MVC solo funcionan con vistas MVC.

Esto parece ser un problema bastante común con MVC mixto y proyectos de formularios web. Mi MVC master no está haciendo nada con ViewData, por lo que no veo ninguna razón por la que los formularios web no puedan usarlos.

¿Fue útil?

Solución

Puede compartir absolutamente la misma página maestra. Su página maestra MVC simplemente debe apuntar a la página maestra de WebForms a través de su atributo MasterPageFile. Esto aplica los estilos de MasterPage de WebForms a su MVC MasterPage.

Estoy usando esta configuración en producción.

La declaración en mi página maestra MVC, apuntando a la página maestra de formularios web:

<%@ Master Language="C#" MasterPageFile="~/MasterPage/Site.Master"
AutoEventWireup="true" Inherits="System.Web.Mvc.ViewMasterPage" %>

Funciona como un encanto.

Otros consejos

Esta publicación de blog le guía por los pasos necesarios para compartir Páginas maestras de WebForm y MVC con poca o ninguna duplicación. También incluye un proyecto de muestra que puede descargar, y lo encontré bastante útil.

Un problema que encontré fue que estaba usando un control LoginStatus en mi encabezado. LoginStatus debe estar dentro de un formulario, por lo que no podría usarlo en mi página maestra raíz (no quiero terminar con formularios anidados en todas mis páginas MVC). Pero ese fue un control bastante fácil de reemplazar con un simple bloque de código en mi página maestra de raíz.

En mi aplicación de formularios web, mi página maestra hereda de " HLPUSD.SMART.SMARTMaster " que es solo el espacio de nombres para nuestra aplicación y luego el nombre de la clase de formulario web.

En mi proyecto MVC, la página maestra hereda de " System.Web.Mvc.ViewMasterPage "

¿Creo que esto tiene algo que ver con eso?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top