【问题标题】:Is Razor view with ASPX .Master page possible?是否可以使用 ASPX .Master 页面进行 Razor 视图?
【发布时间】:2010-08-13 16:59:03
【问题描述】:

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

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

它给了我这个错误信息:

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

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我认为您需要在共享文件夹中查找_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

      这也是一篇关于使用 razor 嵌套母版页的有趣帖子...

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

      HTH

      【讨论】:

      • 您对使用 _Layout.cshtml 的建议意味着我必须转换我现有的母版页和所有其他页面。或者我将不得不复制我的母版页(一个在 Razor 中,一个在 Web 表单引擎中)。希望避免这种情况(因为我已经可以毫无问题地混合 Razor 部分视图)
      【解决方案4】:

      在 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(); 
      

      【讨论】:

      • 请编辑您的答案并格式化代码以使其可读。
      【解决方案5】:

      我自己刚刚经历了这个过程,发现this method by Matt Hawley 很有效。

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

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

      【讨论】:

        【解决方案6】:

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

        Layout/Master pages using Razor

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-11
          • 2011-01-19
          • 1970-01-01
          • 2021-04-01
          • 2018-12-14
          • 1970-01-01
          • 2018-01-26
          相关资源
          最近更新 更多