2012-05-25 40 views
1

我之前问过这个问题,但问题是我得到一个响应,而且这个响应不是针对我问的问题。所以,为了清楚,预先,这个问题不是关于:如何在Razor和Webforms之间共享母版页

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

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

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

+0

为什么投票下来? – ivowiblo

+0

可能因为原来的标题是绝对可怕的。 –

+0

它更容易修复它... – ivowiblo

回答

3

据我知道这是不可能的,原因有二:

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

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

+0

这些都是好的一点,但它不是真的,它不是可能。见http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx – Milimetric

+0

@Milimetric这仍然不会使第一个点无效(主机必须是本地的)。 AFAICT它还要求您使用MVC母版页,而不仅仅是任何旧的母版页。接下来,您需要更改控制器以返回不同的查看结果。 Razor视图中的标准基础结构使用Layout属性来设置主框架不再有效,并且您不能在Razor视图中使用'@ sections',因此它将主框架限制为单个''元素。所以对于手头的问题来说太有限了。无论如何,这是一件很棒的事情,当你陷入困境时,它可以帮助你。 – Ruben

2

因为这是两个不同的技术,您将无法使用相同的文件。您需要为您的WebForms应用程序提供一个MasterPage,并且您的MVC应用程序的Layout将看起来相同。

如果您的母版页/布局没有动态内容,它只是纯html,我认为你可以在一个文件中创建一个脚本,从中创建MasterPage和布局文件,但我不认为这值得。

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> 
+0

这不是真正使用.cshtml MVC视图中的Web窗体母版页,而是使用MVC母版页来显示部分。 – Ruben

+0

正在呈现的视图不是部分视图,即全部视图。如果有什么是部分它是razorview.aspx –

+0

认为像和runat =服务器似乎漂亮的WebForms给我。你能提供一个关于MasterPage的样子,只是为了确认吗? – ivowiblo