是否可以在MVC和webforms之间共享母版页?

Cra*_*len 32 legacy asp.net-mvc webforms master-pages dry

我正在将MVC添加到具有许多遗留webform页面的项目中.这很好用.但是,我目前有一个单独的MVC和webforms母版页.两个母版页产生基本相同的输出.我真的很想杀掉webforms,只需使用我的所有页面的MVC母版页并保持干净.

当我忘记改变两者时,不是DRY已经咬了我几次.

我试着用显而易见的方法,只是将webform内容页面的MasterPage属性指向MVC主页面.这会抛出一个错误,说MVC主控只能使用MVC视图.

这似乎是混合MVC和webform项目的一个相当普遍的问题.我的MVC主人没有对ViewData做任何事情,所以我没有看到webforms无法使用它们的任何原因.

Pet*_*r J 27

您绝对可以共享同一个母版页.您的MVC母版页必须通过其MasterPageFile属性简单地指向WebForms母版页.这将您的WebForms MasterPage样式应用于MVC MasterPage.

我在生产中使用此设置.

我的MVC母版页上的声明,指向Web窗体母版页:

<%@ Master Language="C#" MasterPageFile="~/MasterPage/Site.Master"
AutoEventWireup="true" Inherits="System.Web.Mvc.ViewMasterPage" %>
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.

  • MVC可以有代码隐藏(默认情况下不会创建它们).您始终可以在声明中使用"Inherits"属性,指向.cs文件. (2认同)

Ash*_*ate 8

这篇博文引导您完成共享WebForm和MVC母版页的必要步骤,几乎没有重复.它还包括一个可以下载的示例项目,我发现它非常有用.

我遇到的一个打嗝是我在标题中使用了LoginStatus控件.LoginStatus必须在一个表单中,所以我无法在我的根母版页中使用它(不想在我的所有MVC页面上使用嵌套表单).但是,在我的根母版页中用一个简单的代码块替换它是一个非常简单的控件.