你如何使用剃刀包含.html或.asp文件?

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)

  • 是的,这适用于静态文件,这是问题的一部分.我有一个问题需要在我的页面中包含一个`.svg`文件,这是最简单的解决方案 (5认同)
  • @AndrewBarber - 你能详细说说吗?我知道它对.asp文件不起作用,因为不会加载渲染引擎,但它适用于.html(和其他静态文件),对吧? (2认同)
  • 我知道这个问题已经过时了,但您的回答正是我想要的,在我的页面上将SVG文件包含为HTML!干得好! (2认同)

小智 59

尝试将您的html页面设置为cshtml页面,并将其包含在:

@RenderPage("_header.cshtml")
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于您包含cshtml页面而不是直接html页面的情况. (5认同)
  • 此方法适用于包含静态页面.使用相对URL作为cshtml页面的路径. (3认同)

Joh*_*ann 8

尝试实现此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)


mar*_*ind 5

Razor不支持服务器端包含.最简单的解决方案是将菜单标记复制到_Layout.cshtml页面中.

如果您只需要包含.html文件,则可以编写一个自定义函数,从磁盘读取文件并编写输出.

但是,由于您还希望包含.asp文件(可能包含任意服务器端代码),因此上述方法无效.您必须有办法执行.asp文件,捕获生成的输出,并将其写入cshtml文件中的响应.

在这种情况下,我会采用复制+粘贴方法


Sta*_*ked 5

@RenderPage("PageHeader.cshtml")
<!-- your page body here -->
@RenderPage("PageFooter.cshtml")
Run Code Online (Sandbox Code Playgroud)

这很好用,可以节省你很多时间.