Razor视图与ASPX.Master页面可能吗?

是否有可能保持我现有的.master页面,并使用一个新的ASP.NET MVC 3 Razor视图? 我试过这个:

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

它给了我这个错误消息:

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

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

一种select是复制主人,正如你所提到的,而不是复制所有的代码,你可以将主页面分成一堆Razor和ASPX主人可以embedded的ASPX部分。 然后,你可以开始转换每个页面,并逐个部分,以剃刀,最终摆脱ASPX主。

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

这有点冒险,但可行。 我认为所描述的方法可以进一步封装和清理,这样就可以build立自己的观点和控制器,而不用担心事情如何连接在一起。

我想你需要在共享文件夹中查找_Layout.cshtml …

这里是aspx和剃刀视图引擎之间的比较….

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

这也是一个有关剃刀嵌套主页interesstingpost…

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

HTH

支持MVC中的.NET用户控件

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

  • 创build一个ASP页面,其中包含您的.net用户控件在您的MVC网站。
  • 获取用户控件生成的HTMLstring。
  • 在MVC布局页面中使用HTMLstring。

代码示例:

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

刚刚经历了这个过程,我发现马特·霍利(Matt Hawley)的这个方法是一种享受。

这种方法通过创build一个标准的aspx页面来使用你需要的母版页。 然后,您可以根据需要添加内容占位符。 然后您使用视图的名称来调用RenderPartial。 然后你的控制器的响应被传递到你想渲染的实际视图。

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

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

布局/主页使用剃刀