Domanda

Sto aggiungendo MVC a un progetto che ha MOLTE pagine webform legacy. Funziona benissimo. Tuttavia, attualmente ho una pagina master separata per MVC e per i moduli web. Le due pagine mastro producono un output sostanzialmente identico. Mi piacerebbe davvero uccidere uno dei moduli web e usare semplicemente la pagina principale MVC con tutte le mie pagine e rimanere ASCIUTTO.

Non essere DRY mi ha già morso un paio di volte quando mi sono dimenticato di cambiare entrambi.

Ho provato a fare in modo ovvio e puntando semplicemente l'attributo MasterPage della pagina di contenuto del modulo web sulla pagina principale di MVC. Questo genera un errore che dice che i master MVC funzionano solo con le viste MVC.

Sembra che sarebbe un problema abbastanza comune con progetti misti MVC e webform. Il mio master MVC non sta facendo nulla con ViewData, quindi non vedo alcun motivo per cui i moduli web non possano usarli.

È stato utile?

Soluzione

Puoi assolutamente condividere la stessa pagina principale. La pagina principale MVC deve semplicemente puntare alla pagina principale WebForms tramite l'attributo MasterPageFile. Questo applica i tuoi stili WebForms MasterPage al tuo MVC MasterPage.

Sto usando questa configurazione in produzione.

La dichiarazione sulla mia pagina principale MVC, che punta alla pagina principale dei moduli Web:

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

Funziona come un fascino.

Altri suggerimenti

Questo post sul blog ti guida attraverso i passaggi necessari per condividere Pagine master WebForm e MVC con poca o nessuna duplicazione. Include anche un progetto di esempio che puoi scaricare e l'ho trovato abbastanza utile.

Un singhiozzo che ho riscontrato è che stavo usando un controllo LoginStatus nella mia intestazione. LoginStatus deve trovarsi all'interno di un modulo in modo da non poterlo utilizzare nella mia pagina principale di root (non volendo finire con moduli nidificati su tutte le mie pagine MVC). Ma è stato un controllo abbastanza semplice da sostituire con un semplice blocco di codice nella mia pagina principale di root.

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 principale eredita da " System.Web.Mvc.ViewMasterPage "

Me pensa che questo abbia qualcosa a che fare con esso?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top