Избегание двойных кавычек во встроенном скрипте c # в javascript

Мне нужно экранировать двойные кавычки во встроенном c # в JavaScript. Код ниже:

if ("<%= TempData["Message"]%>" == "") {
    // code
};

Обычно, я бы просто использовал одинарные кавычки так:

if ('<%= TempData["Message"]%>' == "") {
    // code
};

Тем не мение,TempData["Message"] содержит одинарные кавычки (когда он содержит ссылку, сгенерированную помощником Html.ActionLink () в ASP.NET MVC). Так что пока я могу поменять всех помощников ActionLink внутриTempData["Message"] для тегов, это интересная проблема, и было бы интересно узнать, есть ли у кого-нибудь ответ.

Ответы на вопрос(3)

Решение Вопроса

HttpUtility.JavaScriptStringEncode.
Этот метод является новым для ASP.Net 4.0; для более ранних версий используйтеWPL.

 SLaks22 сент. 2010 г., 01:22
Я не знал об этом. Это должно работать нормально.
 ajbeaven22 сент. 2010 г., 01:20
Ajax.JavaScriptStringEncode, похоже, работает. Любой комментарий?
 ajbeaven22 сент. 2010 г., 01:08
Хм, у меня нет .NET 4. Что он делает?
 ajbeaven22 сент. 2010 г., 01:23
Отлично, спасибо :) +1
 SLaks22 сент. 2010 г., 01:19
Это ускользает от группы персонажей. Используйте WPL.

Вы можете использоватьAjaxHelper.JavaScriptStringEncode метод внутри вида Razor, например:

if ("@Ajax.JavaScriptStringEncode(TempData["Message"].ToString())" == "") {
    // do stuff
}

Если это слишком многословно, создайте этого маленького помощника в/App_Code/JS.cshtml

@helper Encode(string value) {
    @(HttpUtility.JavaScriptStringEncode(value))
}

Который вы можете затем позвонить из любого представления:

@JS.Encode("'single these quotes are encoded'")

написав HtmlHelper, который кодирует строки в формат, приемлемый в Javascript:

public static string JSEncode(this HtmlHelper htmlHelper, string source)
{
    return (source ?? "").Replace(@"'", @"\'").Replace(@"""", @"\""").Replace(@"&", @"\&").Replace(((char)10).ToString(), "<br />");
}

Тогда, по вашему мнению:

if ('<%= Html.JSEncode( TempData["Message"] ) %>' == "") {
    // code
};
 SLaks22 сент. 2010 г., 01:18
Это очень неправильно. Вы не должны заменять\r с<br /> теги, и есть больше символов, которые вам нужно убежать.
 Clicktricity22 сент. 2010 г., 09:52
Это то, что работает для меня, и сообщения, которые мне нужно кодировать. Не стесняйтесь приспосабливаться к вашим индивидуальным потребностям
 SLaks22 сент. 2010 г., 22:46
Ваш код - дыра в XSS. Вы должны это исправить.
 bobince22 сент. 2010 г., 01:31
В частности: саму обратную косую черту (в противном случае\" сбежал в\\" и разрывает строку с последствиями безопасности) и другие символы новой строки.

Ваш ответ на вопрос