2009-05-08 29 views
31

Estoy agregando MVC a un proyecto que tiene MUCHAS páginas heredadas de formularios web. 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. Me gustaría matar a los webforms uno y simplemente usar la página maestra de MVC con todas mis páginas y permanecer seco.¿Es posible compartir una página maestra entre MVC y webforms?

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

Intenté hacerlo de la manera más obvia y simplemente apuntando el atributo de página maestra de la página de contenido web en la página maestra de MVC. Esto arroja un error al decir que los maestros MVC solo funcionan con vistas MVC.

Parece que sería un problema bastante común con los proyectos mixtos de MVC y de webform. Mi MVC maestro no está haciendo nada con ViewData, por lo que no veo ningún motivo por el que los formularios web no puedan usarlos.

+0

¿Has encontrado la manera de hacer esto desde el otro lado? I.E MVC> Formas web especialmente con respecto a los helpers html en la página maestra de MVC. – Damien

Respuesta

26

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 sus estilos de WebForms MasterPage a su MVC MasterPage.

Estoy utilizando esta configuración en producción.

La declaración en mi MVC página maestra, señalando la Web Forms página maestra:

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

funciona como un encanto.

+1

Sí, eso tiene sentido. Sin embargo, preferiría hacerlo al revés y utilizar MVC master para las páginas antiguas, ya que está mucho mejor diseñado. –

+0

No se me ocurre una manera de forzar System.Web.Mvc.ViewMasterPage para permitir controles secundarios de tipo System.Web.UI.Page en lugar de System.Web.Mvc.ViewPage, pero eso es lo que desea en este escenario . –

+0

Esto funciona, pero ¿conoce una forma de evitar que WebForms use la etiqueta de formulario html de nivel superior? http://stackoverflow.com/questions/1031252 – Keith

0

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

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

mí piensa que esto tiene algo que ver con eso?

8

Este blog post lo guía por los pasos necesarios para compartir las 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 inconveniente con el que me 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 raíz de maestro.

+0

Pero no podemos usar html.actionlink :( – Tassadaque

Cuestiones relacionadas