Pergunta

Estou adicionando MVC para um projeto que tem páginas legado webform muitos. Isso funciona bem. No entanto, eu tenho atualmente uma masterpage separado para MVC e para os webforms. As duas páginas mestras produzir uma saída essencialmente idênticos. Eu realmente gostaria de matar os webforms um e apenas usar a página mestra MVC com todas as minhas páginas e ficar seco.

Não sendo DRY já mordido me algumas vezes quando eu esqueci de mudar tanto.

Eu tentei fazer o caminho óbvio e apenas apontando atributo MasterPage da página de conteúdo do formulário Web na masterpage MVC. Isso gera um erro dizendo que os mestres MVC só funcionam com vistas MVC.

Isto parece que seria um problema bastante comum com projetos MVC e webform mistos. Meu mestre MVC não está fazendo nada com ViewData, então eu não vejo qualquer razão os webforms não poderia usá-los.

Foi útil?

Solução

Você pode absolutamente compartilhar a mesma página mestra. Sua página mestre MVC deve simplesmente apontar para os WebForms masterpage via seu atributo MasterPageFile. Isto aplica-se seus estilos WebForms MasterPage ao seu MVC MasterPage.

Eu estou usando esta configuração na produção.

A declaração no meu MVC mestre Page, apontando para o Web Forms Mestre Página:

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

funciona como um encanto.

Outras dicas

Este blog percorre as etapas necessárias para compartilhar WebForm e MVC páginas mestras com pouca ou nenhuma duplicação. Ele também inclui um projeto de exemplo que você pode baixar, e eu achei muito útil.

Um soluço que eu tive foi que eu estava usando um controle LoginStatus no meu cabeçalho. LoginStatus deve estar dentro de uma forma que eu não poderia usá-lo na minha página mestra raiz (não querendo acabar com formulários aninhados em todas as minhas páginas MVC). Mas isso era um controle muito fácil de substituir com um bloco de código simples na minha página mestra raiz.

Na minha webforms app, minha página mestre herda de "HLPUSD.SMART.SMARTMaster", que é apenas o namespace para a nossa aplicação e, em seguida, o nome da classe de formulário Web.

No meu projeto MVC, a página mestre herda de "System.Web.Mvc.ViewMasterPage"

Me acha que isso tem algo a ver com isso?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top