【发布时间】: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
是否可以保留我现有的 .master 页面并将其与新的 ASP.NET MVC 3 Razor 视图一起使用?我试过这个:
@{
LayoutPage = "~/Views/Shared/Site.master";
}
它给了我这个错误信息:
无法呈现文件“~/Views/Shared/Site.master”,因为它不存在或不是有效页面。
【问题讨论】:
标签: asp.net-mvc razor
很遗憾,没有。母版页是 ASPX WebForms 视图引擎的一部分,而不是 MVC 框架,因此 Razor 无法与其互操作。
如您所述,一个选项是复制母版,但您可以将母版页面分解为 Razor 和 ASPX 母版可以嵌入的一堆 ASPX 部分,而不是复制所有代码。然后,您可以开始将每个页面和部分页面逐个转换为 Razor,并最终摆脱 ASPX 主控。
【讨论】:
实际上有一种方法可以做到这一点。 Scott Hansleman 有一篇关于该主题的博文:http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx
这有点骇人听闻,但可行。我认为所描述的方法可以进一步封装和清理,以便您可以构建视图和控制器,而不必担心事物是如何连接在一起的。
【讨论】:
我认为您需要在共享文件夹中查找_Layout.cshtml...
这里是aspx和razor视图引擎的对比......
这也是一篇关于使用 razor 嵌套母版页的有趣帖子...
HTH
【讨论】:
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();
【讨论】:
我自己刚刚经历了这个过程,发现this method by Matt Hawley 很有效。
此方法通过创建使用所需母版页的标准 aspx 页面来工作。然后,您可以根据需要添加内容占位符。然后使用要使用的视图名称调用 RenderPartial。然后,来自控制器的响应会传递到您要渲染的实际视图。
完成这项工作需要更多的管道,您必须调用扩展方法来在控制器中呈现您的视图,但是一旦设置好它就可以很好地工作。
【讨论】:
在 Razor 中,您可以使用布局页面实现相同的功能。
【讨论】: