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和剃刀视图引擎之间的比较….
这也是一个有关剃刀嵌套主页interesstingpost…
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。
布局/主页使用剃刀