如何在Razor和Webforms之间共享母版页

时间:2012-05-25 15:51:44

标签: asp.net-mvc razor webforms

之前我问过这个问题,但问题是我收到了一个回复,而且回复不是我问的问题。所以,为了清楚地说明这个问题并非如此:

我不想在同一个项目中使用HYBRID,MVC和Webforms!

有人能为我提供一个链接,显示两个项目与一个母版页并排运行吗?一个项目是ASP.Net Web窗体,包含母版页。另一个项目是MVC Razor项目。 Master页面将提供指向.aspx页面和.cshtml视图的链接。 这两个项目都应该是C#。我需要能够下载源代码,亲眼看看这一切是如何运作的。

答案#1不是我要找的答案。我的问题非常具体。

5 个答案:

答案 0 :(得分:3)

据我所知,这有两个原因:

  • 您无法在应用程序外部使用.master页面。它必须是应用程序的一部分(作为文件或与VirtualPathProvider技巧相结合的库的嵌入资源)。
  • 您不能使用.cshtml中的.master页面,就像您不能将.aspx页面中的.cshtml布局文件用作MasterPageFile一样。

因此,似乎无法直接重新使用您现有的.master页面。

答案 1 :(得分:2)

由于这是两种不同的技术,您将无法使用相同的文件。您需要为WebForms应用程序提供MasterPage,并为MVC应用程序提供看起来相同的布局。

如果你的MasterPage / Layout没有动态内容而且它只是简单的html,我想你可以把它放在一个文件中并创建一个脚本,从中创建MasterPage和Layout文件,但我不认为它值得。

答案 2 :(得分:1)

答案 3 :(得分:1)

我无法向您展示完整的消息来源。不是我的表现。但我可以告诉你这个。这是我们用于使用WebForm母版页渲染剃刀视图的部分内容。

--- --- razorview.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <% Html.RenderPartial((string) ViewBag._ViewName); %>
</asp:Content>
<asp:Content ID="scriptContent" ContentPlaceHolderID="ScriptContent" runat="server">

</asp:Content>

--- ---使用

 public ActionResult Create(int clientId)
 {
....
return this.RazorView(choices); 

---的Site.Master(删节)---

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

<%@ Import Namespace="...." %>
<!DOCTYPE html>
<html>
<head id="Head1" runat="server">
    <title>Some Alt</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />   
    <link href="../../Site.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder ID="ScriptContent" runat="server" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="-1" />
</head>
<body>
    <div class="page">
        <div id="main">
            <table width="100%">
                <tr>
                    <td valign="top" width="150" height="50">
                        <img src="<%= Common.CompanyLogoPath%>" alt="Some Alt width="150"
                            height="50" />
                    </td>
                    <td align="left" width="630" height="50" class="mainheading">
                        Description
                    </td>
                    <td align="right" valign="bottom">
                        <%= DateTime.Now.FormatShortDate() %>
                    </td>
                </tr>
                <tr>
                    <td colspan="3">
                        <hr />
                    </td>
                </tr>
                <tr>
                    <td valign="top" class="rightBorder">
                        <table>
                           .....
            </table>
        </div>
    </div>
</body>
</html>

答案 4 :(得分:1)

像往常一样,斯科特·汉塞尔曼有一些选择。你可以做到,但它并不漂亮:

http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx