Razor是否可以使用ASPX .Master页面查看?

时间:2010-08-13 16:59:03

标签: asp.net-mvc razor

是否可以保留现有的.master页面并将其与新的ASP.NET MVC 3 Razor视图一起使用?我试过这个:

@{
   LayoutPage = "~/Views/Shared/Site.master";
 }

它给了我这个错误信息:

无法呈现文件'〜/ Views / Shared / Site.master',因为它不存在或不是有效页面。

6 个答案:

答案 0 :(得分:34)

不幸的是没有。母版页是ASPX WebForms视图引擎的一部分,而不是MVC框架,因此Razor无法与之互操作。

如上所述,一种选择是复制母版,但不是复制所有代码,您可以将母版页分解为Razor和ASPX大师可以嵌入的一堆ASPX部分。然后你可以开始将每个页面和部分一个一个地转换为Razor,最终摆脱ASPX主页。

答案 1 :(得分:25)

实际上有一种方法可以做到这一点。 Scott Hansleman有一篇关于这个主题的博客文章:http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx

这有点hackish,但可行。我认为所描述的方法可以进一步封装和清理,以便您可以构建视图和控制器,而无需担心事情是如何连接在一起的。

答案 2 :(得分:8)

我认为您需要在共享文件夹中查找_Layout.cshtml ...

这是aspx和razor视图引擎之间的比较....

http://weblogs.asp.net/shijuvarghese/archive/2010/07/29/aspx-and-razor-view-engines-in-asp-net-mvc-3-preview-1.aspx

这也是一篇关于使用剃刀的嵌套主页的有趣帖子......

http://weblogs.asp.net/fredriknormen/archive/2010/08/01/asp-net-mvc-3-0-preview-1-razor-and-nested-master-pages.aspx

HTH

答案 3 :(得分:2)

支持MVC中的.NET用户控件

MVC不正式支持.Net用户控件,但您可以检索它们生成的html。 以下代码检索由几十个ASCX文件组成的页面生成的HTML。

  • 在MVC网站中创建一个包含.Net用户控件的ASP页面。
  • 获取用户控件生成的HTML字符串。
  • 在MVC布局页面中使用HTML字符串。

代码示例:

try{

    using (WebClient client = new WebClient())  
    {

        client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";

        myHTML = client.DownloadString("http//www.mysite.com/header.aspx");
    }

} catch ( WebException exception )

{

    using(var reader = new StreamReader(exception.Response.GetResponseStream())){

        Response.Write(reader.ReadToEnd());

    }

}

@Html.Raw(myHTML ); //OR Response.Write(myHTML);

@RenderBody(); 

答案 4 :(得分:1)

刚刚完成了这个过程,我发现this method by Matt Hawley是一种享受。

此方法通过创建使用所需母版页的标准aspx页面来工作。然后,您可以根据需要添加内容占位符。然后使用要使用的视图名称调用RenderPartial。然后,控制器的响应将传递给您想要渲染的实际视图。

需要更多的管道来完成这项工作,你必须调用扩展方法来在控制器中渲染你的视图,但是一旦你设置它就能很好地工作。

答案 5 :(得分:0)

在Razor中,您可以使用布局页面实现相同的功能。

Layout/Master pages using Razor