2009-06-23 15 views
10

Tenemos una gran aplicación heredada en la que queremos comenzar a utilizar MVC para nuevas funcionalidades.Compartiendo un maestro entre MVC y WebForms - tratando con el <form>

Para hacer esto añadimos enrutamiento personalizado, por ejemplo:

routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.as[pmh]x(/.*)?" }); 

y queremos compartir la página maestra entre las viejas y las nuevas WebForms páginas MVC.

Esto parece bastante simple: cambió el maestro para heredar de ViewMasterPage y también se puede utilizar como maestro para páginas MVC.

El problema es el HTML <form>.

La página maestra tiene una etiqueta <form> en la parte superior y 3 paneles de contenido en su interior, que es como le gusta a WebForms. El control Page anula el formulario del maestro para señalar hacia atrás en la página, y esto parece ser un comportamiento codificado.

Los tres paneles de contenido tienen controles de WebForms, por lo que la etiqueta de nivel de página <form> debe estar fuera de ellos para cubrir los tres. Algo como esto:

<form id="form1" runat="server"> 
    ... 
    <asp:contentplaceholder id="content1" runat="server" /> 
    ... 
    <asp:contentplaceholder id="content2" runat="server" /> 
    ... //etc 
</form> 

Sin embargo, para MVC queremos tener formas dentro de las vistas utilizando el ayudante Html.BeginForm. HTML no te permite anidar formularios. El patrón MVC necesita las vistas para publicar de nuevo en diferentes acciones (por ejemplo, una vista de "detalles" puede publicar de nuevo en una acción de "edición").

¿Alguien sabe una buena forma de evitar esto?

+0

Conozco esta pregunta relacionada: http://stackoverflow.com/questions/841418 Aquí estoy específicamente preocupado con el problema de la etiqueta del formulario – Keith

Respuesta

8

Compartimos una página maestra entre formularios web y MVC que no tiene el <form>. Puede crear una página maestra intermedia para formularios web que, a su vez, usa su página maestra raíz, pero agrega el <form>. La estructura jerárquica de las páginas maestras es muy útil para estos constructos.

+0

Esto es básicamente lo que hice al final: tener un campo común .master con parte del diseño, y luego un MVC.master y un WebForms.master – Keith

+1

¿Tiene algún ejemplo que pueda ver? Creo que estoy dando la vuelta. –

Cuestiones relacionadas