Как включить файл .html или .asp, используя бритву? - PullRequest
34 голосов
/ 15 марта 2011

Можно ли использовать серверное включение в движке 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>

Вместо включения содержимого файла, если я делаю источник просмотра, я вижу буквальный текст.

" <!--#include virtual="/serverside/menus/MainMenu.asp" --> 
    <!--#include virtual="/serverside/menus/library_menu.asp" -->
    <!--#include virtual="/portfolios/serverside/menus/portfolio_buttons_head.html" -->"

Ответы [ 14 ]

86 голосов
/ 01 февраля 2013
@Html.Raw(File.ReadAllText(Server.MapPath("~/content/somefile.css")))
59 голосов
/ 17 сентября 2011

Попробуйте превратить вашу html-страницу в cshtml-страницу и включить ее в:

@RenderPage("_header.cshtml")
8 голосов
/ 30 декабря 2011

Попробуйте реализовать этот 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);
    }
}

или

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);
}
5 голосов
/ 15 июля 2012
@RenderPage("PageHeader.cshtml")
<!-- your page body here -->
@RenderPage("PageFooter.cshtml")

Это прекрасно работает и может сэкономить вам много времени.

5 голосов
/ 15 марта 2011

Razor не поддерживает серверные включения.Самым простым решением было бы скопировать разметку меню на страницу _Layout.cshtml.

Если вам нужно было только включить файлы .html, вы, вероятно, могли бы написать пользовательскую функцию, которая считывает файл с диска и записывает вывод.

Однако, поскольку вы также хотите включить файлы .asp (которые могут содержать произвольный код на стороне сервера), вышеуказанный подход не будет работать.У вас должен был бы быть способ выполнить файл .asp, захватить сгенерированный вывод и записать его в ответ в вашем файле cshtml.

В этом случае я бы использовал подход копирование + вставка

3 голосов
/ 16 февраля 2012

Извините, ребята, за немного старый ответ, но я нашел способ прикрепить asp-файл бритвой. Конечно, вам нужно сделать какой-то трюк, но это работает! Прежде всего я создал приложение .NET MVC 3.

В моем _Layout.cshtml я добавил следующую строку:

@Html.Partial("InsertHelper")

Затем я создал InsertHelper.aspx в моей общей папке со следующим содержимым:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!--#include VIRTUAL="/ViewPage1.aspx"-->

ViewPage1.aspx расположен в моем корневом каталоге и имеет простой способ проверить, работает ли он:

<%
string dummy;
dummy="nz";
%>

<% if (dummy == "nz") { %>
nz indeed
<% } else { %>
not nz
<% } %>

И это работает!

Razor может отображать партиалы с помощью другого ViewEngine, поэтому этот пример работает.

И еще одна вещь: не забудьте не добавлять следующую строку в оба файла aspx:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

Вы можете добавить его только один раз! Надеюсь, это поможет!

3 голосов
/ 15 марта 2011

Создайте метод расширения HtmlHelper, который получает содержимое файлов:

public static class HtmlHelpers
{
  public static MvcHtmlString WebPage(this HtmlHelper htmlHelper, string url)
  {
    return MvcHtmlString.Create(new WebClient().DownloadString(url));
  }
}

Использование:

@Html.WebPage("/serverside/menus/MainMenu.asp");
2 голосов
/ 08 апреля 2015

Просто сделай:

@Html.Partial("_SliderPartial")

, а "_SliderPartial" - это ваш файл "_SliderPartial.cshtml" и ваш штраф.

2 голосов
/ 07 марта 2014

В моем _Layout.cshtml я добавил следующую строку:

@Html.Partial("InsertHelper")

Затем я создал InsertHelper.aspx в моей общей папке с этим содержимым:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!--#include VIRTUAL="/ViewPage1.aspx"-->
2 голосов
/ 29 августа 2012

У меня была такая же проблема, когда я пытался включить файл .inc в MVC 4.

Чтобы решить эту проблему, я изменил суффикс файла на .cshtml и добавил следующую строку

@RenderPage("../../Includes/global-banner_v4.cshtml")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...