È possibile condividere una masterpage tra MVC e web form?

Sto aggiungendo MVC per un progetto che ha MOLTI legacy webform pagine. Questo funziona bene. Tuttavia, al momento ho un separato masterpage per MVC e per il webforms. Le due pagine master produrre essenzialmente identica uscita. Mi piacerebbe davvero uccidere il webforms e proprio usare MVC pagina master con tutte le mie pagine e rimanere a SECCO.

Non essere ASCIUTTO ha già morso me un paio di volte quando mi dimentico di cambiare entrambi.

Ho provato a fare il modo più ovvio e giusto che punta il modulo contenuto della pagina MasterPage attributo a MVC masterpage. Questo genera un errore dicendo che il MVC maestri funzionano solo con MVC vista.

Questo sembra come dovrebbe essere un problema abbastanza comune con un misto di MVC e webform progetti. Il mio MVC master non fa niente con ViewData, quindi non vedo alcun motivo per il webforms poteva usarli.

  • Hai potuto trovare un modo per fare questo in altro modo. I. E MVC > Webforms soprattutto per quanto riguarda gli helper html nel pattern MVC masterpage.
InformationsquelleAutor Craig Quillen | 2009-05-08



3 Replies
  1. 27

    Si può assolutamente condividere la stessa pagina master. Il MVC pagina master deve semplicemente scegliere il WebForms masterpage, tramite il suo MasterPageFile attributo. Questo si applica il WebForms MasterPage stili per la vostra MVC MasterPage.

    Sto usando questo programma di installazione in produzione.

    La dichiarazione sul mio MVC Pagina Master, indicando la Pagina Web Form Master:

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

    Funziona come un fascino.

    • Sì, ha senso. Tuttavia vorrei veramente preferisco farlo in un altro modo e usare MVC master per l’eredità di pagine è molto meglio progettato.
    • Non riesco a pensare a un modo per forzare il Sistema.Web.Mvc.ViewMasterPage per consentire ai bambini di controlli di tipo di Sistema.Web.Interfaccia utente.Pagina invece di Sistema.Web.Mvc.ViewPage, ma che è quello che vuoi in questo scenario.
    • Questo funziona, ma conoscete un modo per aggirare il modo WebForms utilizzare il livello superiore del tag form html? stackoverflow.com/questions/1031252
    • Purtroppo, la mia pagina master non utilizzo del modulo i tag, quindi non posso essere di alcun aiuto di quest’altra domanda.
    • Quando provo questo ho “Impossibile trovare il ContentPlaceHolder ‘MainContent’ nella pagina master ‘/Vista/Shared/Sito.Maestro'”. Il mio MVC master pagina contiene solo la linea 1 che hai dato sopra, sto facendo qualcosa di sbagliato?
    • La linea 1 che ho riportato sopra è solo per la dichiarazione della pagina al top della pagina master. Gli altri elementi (ContentPlaceHolders), deve essere presente.
    • Come per il “Impossibile trovare il Contenuto…”, è necessario per l’installazione di un bambino pagina con <asp:Content > tag.
    • C’è un modo è possibile impostare dinamicamente il MasterPageFile proprietà? In webforms si può fare nel codebehind, non sono sicuro di come si farebbe in MVC.
    • MVC può avere codebehinds (sono semplicemente creati per impostazione predefinita). Puoi sempre utilizzare il “Eredita” proprietà nella dichiarazione, che punta a un .cs file.

  2. 8

    Questo post del blog vi guiderà attraverso i passi necessari per condividere WebForm e MVC pagine master con poca o nessuna duplicazione. Esso include anche un progetto di esempio che è possibile scaricare, e l’ho trovato molto utile.

    C’è un solo problema che ho incontrato è stato che stavo usando un LoginStatus di controllo nell’intestazione. LoginStatus deve essere all’interno di un form, in modo che non posso usare nella mia root pagina master (non volendo finire con form annidati su tutti i miei MVC pagine). Ma che era abbastanza facile controllo di sostituire con un semplice blocco di codice nella mia root pagina master.

    • Ma non possiamo usare l’html.actionlink 🙁
  3. 0

    Nella mia applicazione web form, il mio master pagina eredita da “HLPUSD.SMART.SMARTMaster”, che è appena lo spazio per la nostra applicazione, e poi il nome del modulo di classe.

    Nel mio progetto MVC, il master pagina eredita dal Sistema”.Web.Mvc.ViewMasterPage”

    Di Me pensa che questo ha qualcosa a che fare con esso?

Lascia un commento