2009-05-08 9 views
31

J'ajoute MVC à un projet qui contient BEAUCOUP de pages Webform. Cela fonctionne bien. Cependant, j'ai actuellement une page master séparée pour MVC et pour les webforms. Les deux pages maîtres produisent une sortie essentiellement identique. Je voudrais vraiment tuer les webforms un et juste utiliser la page maître MVC avec toutes mes pages et rester DRY. N'étant pas DRY m'a déjà mordu quelques fois quand j'ai oublié de changer les deux.Est-il possible de partager une page maître entre MVC et des formulaires Web?

J'ai essayé de le faire de façon évidente en pointant simplement l'attribut MasterPage de la page de contenu webform sur la page maître MVC. Cela génère une erreur indiquant que les maîtres MVC ne fonctionnent qu'avec les vues MVC.

Cela semble être un problème assez courant avec les projets mixtes MVC et Webform. Mon maître MVC ne fait rien avec ViewData, donc je ne vois aucune raison pour que les webforms ne puissent pas les utiliser.

+0

Avez-vous trouvé un moyen de le faire dans l'autre sens? I.E MVC> Webforms en particulier concernant les helpers html dans la page master MVC. – Damien

Répondre

26

Vous pouvez absolument partager la même page maître. Votre page maître MVC doit simplement pointer vers la page maître WebForms via son attribut MasterPageFile. Cela applique vos styles WebForms MasterPage à votre MVP MasterPage. J'utilise cette configuration en production.

La déclaration sur mon MVC Maître page, pointant la page Web Forms Maître Page:

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

fonctionne comme un charme.

+1

Oui, c'est logique. Cependant, je préfère vraiment faire l'inverse et utiliser le maître MVC pour les pages héritées, car il est beaucoup mieux conçu. –

+0

Je n'arrive pas à trouver un moyen de forcer System.Web.Mvc.ViewMasterPage à autoriser les contrôles enfants de type System.Web.UI.Page au lieu de System.Web.Mvc.ViewPage, mais c'est ce que vous voulez dans ce scénario . –

+0

Cela fonctionne, mais savez-vous comment WebForms utilise la balise de forme html de haut niveau? http://stackoverflow.com/questions/1031252 – Keith

0

Dans mon application webforms, ma page maître hérite de "HLPUSD.SMART.SMARTMaster" qui est juste l'espace de nom de notre application, puis le nom de la classe de formulaire Web.

Dans mon projet MVC, la page principale hérite de « System.Web.Mvc.ViewMasterPage »

Me pense que cela a quelque chose à voir avec ça?

8

Cette blog post vous guide tout au long des étapes nécessaires pour partager des pages maîtres WebForm et MVC avec peu ou pas de duplication. Il comprend également un exemple de projet que vous pouvez télécharger, et je l'ai trouvé très utile.

Un hoquet que j'ai rencontré était que j'utilisais un contrôle LoginStatus dans mon en-tête. LoginStatus doit être à l'intérieur d'un formulaire afin que je ne puisse pas l'utiliser dans ma page maître racine (ne voulant pas se retrouver avec des formulaires imbriqués sur toutes mes pages MVC). Mais c'était un contrôle assez facile à remplacer par un simple bloc de code dans ma page maître racine.

+0

Mais nous ne pouvons pas utiliser html.actionlink :( – Tassadaque

Questions connexes