MVC3 Razor удаляет теги сценариев из HtmlString - PullRequest
2 голосов
/ 05 октября 2011

У меня есть метод, который добавляет javascript в конец частичных представлений, если это ajax-запрос.Однако моя проблема заключается в том, что при возвращении сценария теги сценария были удалены, а функция, которую я хочу выполнить, записывается в виде простого текста.

if (httpContext.Request.IsAjaxRequest())
        {
            script = "MyNamespace.globals.initFunctions.push(function() { " + script + " });";
            return new HtmlString(@"<script type=""text/javascript"">" + script + "</script>");
        }

Таким образом, вместо получения желаемого результата

<script type="text/javascript">MyNamespace.globals.initFunctions.push(function() { MyNamespace.init(); });</script>

Я получаю MyNamespace.globals.initFunctions.push(function() { MyNamespace.init(); }); в виде обычного текста.

В чем может быть причина?

Редактировать:

Пробоватьс Html.Raw () не помогло.Хотя строка сценария содержит теги сценария, они по-прежнему удаляются при визуализации.

    @{
    string script = ViewUtilities.AddScript("MyNamespace.init();", this.ViewContext.HttpContext);
}

    @Html.Raw(script);

Редактировать 2:

Теперь я попытался написать все это ввид, подобный этому,

<script type="text/javascript">
    MyNamespace.globals.initFunctions.push(function() { MyNamespace.init(); });
</script>

, и он по-прежнему удаляет теги вокруг скрипта и отображает его в виде простого текста.Я не знаю, куда идти отсюда ...

Когда я проверяю ответ с помощью Firebug, он выглядит хорошо, но, глядя на html, это не так.

Ответы [ 3 ]

2 голосов
/ 05 октября 2011

Кодируется HTML, что происходит автоматически с ASP.NET MVC.

Использование @Html.Raw("htmlstring") должно дать вам необработанное значение HTML строки без удаления тегов.

1 голос
/ 05 октября 2011

Вы хотите использовать @Html.Raw(whatever function you call)

Я думаю, вы также, вероятно, хотите вернуть return MvcHtmlString.Create(fullscript);

0 голосов
/ 06 октября 2011

Если вы преобразуете его в метод HtmlHelper, он будет работать. Измените свой ViewUtilities класс следующим образом:

public static class ViewUtilities
{
    public static MvcHtmlString AddScript(this HtmlHelper htmlHelper, string script)
    {
        if (htmlHelper.ViewContext.HttpContext.Request.IsAjaxRequest())
            return new MvcHtmlString(@"<script type=""text/javascript"">" + script + "</script>");
        return new MvcHtmlString("");
    }
}

Затем в файле web.config в папке Views (и в любых папках видов в любых областях) добавьте следующее в список namespaces в элементе <pages pageBaseType="System.Web.Mvc.WebViewPage">:

<add namespace="{namespace where ViewUtilities class is located}"/>

Наконец, на ваш взгляд:

@Html.AddScript("MyNamespace.init();")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...