Как добавить одну цитату для JavaScript в метод Html.TextBoxFor? - PullRequest
1 голос
/ 01 февраля 2011

Я пытаюсь добавить метод javascript в качестве пользовательского атрибута в метод Html.TextBoxFor, например так:

<%: Html.TextBoxFor(model => model.DateCreated, new { size="15", onfocus="myObject.myFunction(this, 'DateCreated');return false;"}) %>

Проблема, с которой я сталкиваюсь, заключается в том, что символы одинарных кавычек кодируются в формате html,у меня есть ожидание <%:.Есть ли способ предотвратить html-кодировку только для этого фрагмента (например, использовать \ для экранирования символов в строках)?Есть ли другой способ добавления этого пользовательского атрибута?Или я просто делаю это неправильно?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Даже если кавычки кодируются, ваш javascript должен работать.Например, следующий фрагмент предупреждает о правильном тексте:

<%: Html.TextBox("DateCreated", "", new { onclick="alert('DateCreated');return false;"}) %>

Другой способ добиться этого - использовать ненавязчивый JavaScript и не смешивать разметку со сценарием:

<%: Html.TextBoxFor(model => model.DateCreated, new { size="15", id="date" }) %>

, а затем в отдельномФайл javascript с использованием jquery:

$(function() {
    $('#date').focus(function() {
        myObject.myFunction(this, 'DateCreated');
        return false;
    });
});
1 голос
/ 01 февраля 2011

Кодировщик по умолчанию в .NET 4 кодирует символы, которые он считает потенциально небезопасными, включая «,», &, <и>. Однако эта кодировка не должна влиять на выполнение фрагмента Javascript, который вы пытаетесь включить, так как браузер автоматически превратит символ «обратно в» перед передачей его в анализатор Javascript. Если это все еще отрицательно влияет на ваше приложение, пожалуйста, ответьте, чтобы мы могли рассмотреть возможность получения официальной ошибки.

При желании вы можете изменить кодировщик по умолчанию, используемый ASP.NET, на свой собственный. Фил обрисовал в общих чертах http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx шаги, необходимые для подключения кодера Anti-XSS. Но если вы захотите, вы можетесоздайте пользовательский HttpEncoder, который закодировал бы все кроме символа ', выполнив те же основные шаги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...