2009-05-08 11 views
31

Aggiungo MVC a un progetto che ha MOLTE pagine Webform legacy. Funziona bene Tuttavia, attualmente dispongo di una masterpage separata per MVC e per le webform. Le due pagine master producono un'uscita essenzialmente identica. Mi piacerebbe davvero uccidere il webforms e solo usare la pagina master MVC con tutte le mie pagine e rimanere DRY.È possibile condividere una masterpage tra MVC e webform?

Non essere ASCIUTATO mi ha già morso un paio di volte quando ho dimenticato di cambiarli entrambi.

Ho provato a fare il modo ovvio e semplicemente puntando l'attributo MasterPage della pagina di contenuto webform nella pagina principale di MVC. Ciò genera un errore che dice che i master MVC funzionano solo con le viste MVC.

Questo potrebbe sembrare un problema piuttosto comune con i progetti MVC e Webform misti. Il mio master MVC non sta facendo nulla con ViewData, quindi non vedo alcun motivo per cui i webform non potrebbero usarli.

+0

Hai trovato un modo per farlo dall'altra parte. I.E MVC> Webform in particolare per quanto riguarda gli helper HTML nella masterpage MVC. – Damien

risposta

26

È possibile condividere assolutamente la stessa pagina master. La tua pagina master MVC deve semplicemente puntare alla pagina principale di WebForms tramite l'attributo MasterPageFile. Ciò applica gli stili di pagina master di WebForm alla tua MVC MasterPage.

Sto utilizzando questa impostazione in produzione.

La dichiarazione sul mio MVC pagina master, che punta al Web Forms Pagina master:

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

funziona come un fascino.

+1

Sì, questo ha senso. Tuttavia, preferirei davvero farlo al contrario e utilizzare il master MVC per le pagine legacy in quanto è progettato molto meglio. –

+0

Non riesco a pensare a un modo per forzare System.Web.Mvc.ViewMasterPage per consentire i controlli figlio di tipo System.Web.UI.Page anziché System.Web.Mvc.ViewPage, ma questo è ciò che si desidera in questo scenario . –

+0

Questo funziona, ma sai come aggirare il modo in cui WebForm utilizza il tag del modulo html di livello superiore? http://stackoverflow.com/questions/1031252 – Keith

0

Nella mia app Webforms, la mia pagina principale eredita da "HLPUSD.SMART.SMARTMaster" che è solo lo spazio dei nomi per la nostra applicazione e quindi il nome della classe webform.

Nel mio progetto MVC, la pagina master eredita da "System.Web.Mvc.ViewMasterPage"

me pensa questo ha qualcosa a che fare con esso?

8

Questo blog post ti guida attraverso i passaggi necessari per condividere pagine master WebForm e MVC con duplicazioni minime o nulle. Include anche un progetto di esempio che puoi scaricare e l'ho trovato molto utile.

Un problema singolare in cui mi sono imbattuto era che stavo usando un controllo LoginStatus nella mia intestazione. LoginStatus deve essere all'interno di un modulo, quindi non potrei utilizzarlo nella mia pagina principale di root (non volendo finire con i moduli annidati su tutte le mie pagine MVC). Ma quello era un controllo piuttosto semplice da sostituire con un semplice blocco di codice nella mia pagina principale di root.

+0

Ma non possiamo usare html.actionlink :( – Tassadaque

Problemi correlati