是否可以保留现有的.master页面并将其与新的ASP.NET MVC 3 Razor视图一起使用?我试过这个:
@{
LayoutPage = "~/Views/Shared/Site.master";
}
它给了我这个错误信息:
无法呈现文件'〜/ Views / Shared / Site.master',因为它不存在或不是有效页面。
答案 0 :(得分:34)
不幸的是没有。母版页是ASPX WebForms视图引擎的一部分,而不是MVC框架,因此Razor无法与之互操作。
如上所述,一种选择是复制母版,但不是复制所有代码,您可以将母版页分解为Razor和ASPX大师可以嵌入的一堆ASPX部分。然后你可以开始将每个页面和部分一个一个地转换为Razor,最终摆脱ASPX主页。
答案 1 :(得分:25)
实际上有一种方法可以做到这一点。 Scott Hansleman有一篇关于这个主题的博客文章:http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx
这有点hackish,但可行。我认为所描述的方法可以进一步封装和清理,以便您可以构建视图和控制器,而无需担心事情是如何连接在一起的。
答案 2 :(得分:8)
我认为您需要在共享文件夹中查找_Layout.cshtml ...
这是aspx和razor视图引擎之间的比较....
这也是一篇关于使用剃刀的嵌套主页的有趣帖子......
HTH
答案 3 :(得分:2)
MVC不正式支持.Net用户控件,但您可以检索它们生成的html。 以下代码检索由几十个ASCX文件组成的页面生成的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();
答案 4 :(得分:1)
刚刚完成了这个过程,我发现this method by Matt Hawley是一种享受。
此方法通过创建使用所需母版页的标准aspx页面来工作。然后,您可以根据需要添加内容占位符。然后使用要使用的视图名称调用RenderPartial。然后,控制器的响应将传递给您想要渲染的实际视图。
需要更多的管道来完成这项工作,你必须调用扩展方法来在控制器中渲染你的视图,但是一旦你设置它就能很好地工作。
答案 5 :(得分:0)
在Razor中,您可以使用布局页面实现相同的功能。