Asp.net mvc 如何在Razor和Webforms之间共享母版页

Asp.net mvc 如何在Razor和Webforms之间共享母版页,asp.net-mvc,razor,webforms,Asp.net Mvc,Razor,Webforms,我以前问过这个问题,但问题是我得到了一个回答,而这个回答不是针对我问的问题。因此,为了明确这一点,首先,这个问题不是关于什么: 我不想在同一个项目中使用混合、MVC和Webforms 有人能给我提供一个链接,显示两个项目在一个母版页上并排运行吗?一个项目是ASP.NETWeb表单,包含母版页。另一个项目是MVC Razor项目。母版页将提供指向.aspx页面以及.cshtml视图的链接这两个项目都应该是C#。我需要能够下载源代码,看看这一切是如何工作的 答案#1不是我想要的答案。我的问题非常具体

我以前问过这个问题,但问题是我得到了一个回答,而这个回答不是针对我问的问题。因此,为了明确这一点,首先,这个问题不是关于什么:

我不想在同一个项目中使用混合、MVC和Webforms

有人能给我提供一个链接,显示两个项目在一个母版页上并排运行吗?一个项目是ASP.NETWeb表单,包含母版页。另一个项目是MVC Razor项目。母版页将提供指向.aspx页面以及.cshtml视图的链接这两个项目都应该是C#。我需要能够下载源代码,看看这一切是如何工作的


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

我建议使用布局来代替MVC Razor


由于这是两种不同的技术,您将无法使用同一个文件。您需要为WebForms应用程序创建一个母版页,并为MVC应用程序创建一个外观相同的布局


如果您的母版页/版面没有动态内容,只是纯html,我认为您可以将其保存在一个文件中,并创建一个脚本,从中创建母版页和版面文件,但我认为这不值得。

据我所知,这是不可能的,原因有两个:

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

因此,直接重新使用现有的.master页似乎是不可能的。

我无法向您展示完整的源代码。不是我的。但我可以给你看这个。这是我们使用Web窗体母版页呈现razor视图的一部分

---razorview.aspx---

---主站点(修订版)---


一些Alt
“alt=”一些alt width=“150”
高度=“50”/>
描述

.....
斯科特·汉斯曼(Scott Hanselman)像往常一样对此有一些选择。你可以做到,但并不漂亮:


可能是因为原来的标题太糟糕了。更容易修改…@Nick K.你听起来有点粗鲁,冷静点。我们正在尽力帮助。如果这是你第二次问这个问题,但没有人能理解,也许你没有你想的那么清楚。这个链接与我想要的最接近。这是一个可下载的示例,但是这个示例在Asp.Net项目中使用VB.Net,而MVC项目不是Razor。这并不是真正使用.cshtml MVC视图中的Web表单母版页,而是使用MVC母版页来显示局部视图。呈现的视图不是局部视图,而是完整视图。如果有什么是局部的,那么它就是razorview.aspxThinks like和runat=server对我来说是相当不错的WebForms。你能提供一个母版页的外观样本来确认吗?@atbyrd-Erm,你不叫RenderPartial吗?这看起来可疑地像是渲染了一个局部。无论如何,如何从Razor视图使用此母版页?您的razorview.aspx不是Razor视图(即razorview.cshtml)。当前的设置是一个ASPX MVC视图,它调用一个分部(碰巧是一个Razor视图)。问题是如何使用Web窗体(不是MVC)主控形状作为Razor MVC view.Beauty的布局。嘿我想这是你的答案。这些都是好的观点,但这不是真的不可能。请参阅@Milimetric,这仍然不会使第一点无效(主节点必须是本地的)。AFAICT还要求您使用MVC母版页,而不仅仅是任何旧的母版页。接下来,您需要更改控制器以返回不同的视图结果。Razor视图中使用Layout属性设置主控形状的标准基础结构不再起作用,并且您不能在Razor视图中使用
@sections
,因此它将主控形状限制为单个
元素。所以这对于手头的问题来说太有限了。尽管如此,这是一个不错的黑客,当你陷入困境时,它可以帮助你。
<%@ 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); 
<%@ 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>