Sharing a master between MVC and WebForms - dealing with the <form>
asp.net, asp.net-mvc, webforms
Solution
We share a master page between web forms and MVC which doesn't have the `<form>`. You can create an intermediate master page for web forms which in turn uses your root master page, but adds the `<form>`. The hierarchical structure of master pages is very useful for these constructs.
Problem
We have a large legacy application where we want to start using MVC for new functionality. To do this we added custom routing, for instance: ``` routes.IgnoreRoute( "{*allaspx}", new { allaspx = @".*\.as[pmh]x(/.*)?" } ); ``` And we want to share the master page between the old WebForms and the new MVC pages. This seems simple enough - changed the master to inherit from `ViewMasterPage` and it can be used as the master for MVC pages too. The problem is the HTML `<form>`. The master page has a `<form>` tag at the top and 3 content panels inside it, which is how WebForms like it. The `Page` control overrides the master's form to point back at the page, and this appears to be a hardcoded behaviour. All three content panels have WebForms controls, so the page level `<form>` tag needs to be outside them to cover all three. Something like this: ``` <form id="form1" runat="server"> ... <asp:contentplaceholder id="content1" runat="server" /> ... <asp:contentplaceholder id="content2" runat="server" /> ... //etc </form> ``` However, for MVC we want to have forms inside the views using the `Html.BeginForm` helper. HTML doesn't let you nest forms. MVC pattern needs the views to post back to different actions (for instance a "details" view might post back to an "edit" action). Does anyone know a good way around this?