38

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

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

它给了我这个错误信息:

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

4

6 回答 6

34

抱歉不行。母版页是 ASPX WebForms 视图引擎的一部分,而不是 MVC 框架,因此 Razor 无法与其互操作。

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

于 2010-08-14T15:36:55.683 回答
25

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

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

于 2011-01-27T18:10:35.677 回答
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

高温高压

于 2010-08-13T17:07:24.070 回答
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(); 
于 2012-11-28T15:45:45.590 回答
1

我自己刚刚经历了这个过程,我发现马特霍利的这种方法很有效。

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

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

于 2013-10-18T14:10:16.767 回答
-1

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

使用 Razor 布局/母版页

于 2011-08-13T05:42:39.960 回答