atb*_*btg 34 razor asp.net-mvc-3
是否可以在Razor视图引擎中使用服务器端包含.html或.asp文件?我们有一个.html文件和.asp文件,其中包含用于我们所有网站的网站菜单.目前我们使用服务器端包括我们所有的网站,所以我们只需要在一个地方更改mensu.
我在_Layout.cshtml的正文中有以下代码
<body>
<!--#include virtual="/serverside/menus/MainMenu.asp" -->
<!--#include virtual="/serverside/menus/library_menu.asp" -->
<!--#include virtual="/portfolios/serverside/menus/portfolio_buttons_head.html" -->
@RenderBody()
</body>
Run Code Online (Sandbox Code Playgroud)
如果我执行视图源,而不是包含文件的内容,我会看到文字文本.
" <!--#include virtual="/serverside/menus/MainMenu.asp" -->
<!--#include virtual="/serverside/menus/library_menu.asp" -->
<!--#include virtual="/portfolios/serverside/menus/portfolio_buttons_head.html" -->"
Run Code Online (Sandbox Code Playgroud)
小智 88
@Html.Raw(File.ReadAllText(Server.MapPath("~/content/somefile.css")))
Run Code Online (Sandbox Code Playgroud)
小智 59
尝试将您的html页面设置为cshtml页面,并将其包含在:
@RenderPage("_header.cshtml")
Run Code Online (Sandbox Code Playgroud)
尝试实现此HTML帮助器:
public static IHtmlString ServerSideInclude(this HtmlHelper helper, string serverPath)
{
var filePath = HttpContext.Current.Server.MapPath(serverPath);
// load from file
using (var streamReader = File.OpenText(filePath))
{
var markup = streamReader.ReadToEnd();
return new HtmlString(markup);
}
}
Run Code Online (Sandbox Code Playgroud)
要么:
public static IHtmlString ServerSideInclude(this HtmlHelper helper, string serverPath)
{
var filePath = HttpContext.Current.Server.MapPath(serverPath);
var markup = File.ReadAllText(filePath);
return new HtmlString(markup);
}
Run Code Online (Sandbox Code Playgroud)
Razor不支持服务器端包含.最简单的解决方案是将菜单标记复制到_Layout.cshtml页面中.
如果您只需要包含.html文件,则可以编写一个自定义函数,从磁盘读取文件并编写输出.
但是,由于您还希望包含.asp文件(可能包含任意服务器端代码),因此上述方法无效.您必须有办法执行.asp文件,捕获生成的输出,并将其写入cshtml文件中的响应.
在这种情况下,我会采用复制+粘贴方法
@RenderPage("PageHeader.cshtml")
<!-- your page body here -->
@RenderPage("PageFooter.cshtml")
Run Code Online (Sandbox Code Playgroud)
这很好用,可以节省你很多时间.
| 归档时间: |
|
| 查看次数: |
68882 次 |
| 最近记录: |