代码之家  ›  专栏  ›  技术社区  ›  bkaid

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

  •  38
  • bkaid  · 技术社区  · 14 年前

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

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

    它给了我这个错误信息:

    无法呈现文件“~/views/shared/site.master”,因为它不存在或不是有效的页面。

    6 回复  |  直到 10 年前
        1
  •  34
  •   Andrew Stanton-Nurse    14 年前

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

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

        2
  •  25
  •   Matt Honeycutt    14 年前

    实际上有一种方法可以做到这一点。斯科特·汉斯曼有一篇关于这个主题的博客: http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx

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

        3
  •  8
  •   server info    14 年前

    我认为您需要在共享文件夹中查找\u layout.cshtml…

    以下是ASPX和Razor View引擎之间的比较…

    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

    高温高压

        4
  •  2
  •   corsiKa    12 年前

    在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
  •  1
  •   Derek Ekins    11 年前

    我刚刚经历了这个过程,我发现 this method by Matt Hawley 干了一顿饭

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

    要使这个工作需要更多的管道,并且您必须调用一个扩展方法来在控制器中呈现视图,但是一旦您设置了它,它就会很好地工作。

        6
  •  0
  •   mahesh    13 年前

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

    Layout/Master pages using Razor