2

我之前问过这个问题,但问题是我得到了一个答复,而该答复不是针对我提出的问题。因此,为了清楚地说明这一点,这个问题不是关于什么的:

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

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

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

4

5 回答 5

3

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

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

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

于 2012-05-25T16:02:27.743 回答
2

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

如果您的 MasterPage/Layout 没有动态内容并且它只是纯 html,我认为您可以将它放在一个文件中并创建一个脚本来从中创建 MasterPage 和 Layout 文件,但我认为这不值得。

于 2012-05-25T16:00:12.970 回答
1

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

http://weblogs.asp.net/scottgu/archive/2010/10/22/asp-net-mvc-3-layouts.aspx

于 2012-05-25T15:54:26.313 回答
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>
于 2012-05-25T16:02:41.723 回答
1

Scott Hanselman 像往常一样对此有一些选择。你可以做到,但它并不漂亮:

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

于 2012-06-08T15:26:15.360 回答