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

时间:2009-05-08 19:31:03

标签: asp.net-mvc webforms master-pages dry legacy

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

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

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

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

3 个答案:

答案 0 :(得分:27)

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

我正在制作中使用此设置。

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

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

像魅力一样。

答案 1 :(得分:8)

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

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

答案 2 :(得分:0)

在我的webforms应用程序中,我的母版页继承自“HLPUSD.SMART.SMARTMaster”,它只是我们应用程序的命名空间,然后是webform类的名称。

在我的MVC项目中,母版页继承自“System.Web.Mvc.ViewMasterPage”

我认为这与它有关吗?