2013-06-14 3 views
1

Мне нужно иметь доступ к строкам, содержащимся в моем коде C#, в JavaScript. Чтобы проверить, я попытался отображения окна сообщения с C# строки в JavaScript (я использую эту строку буквального и окно сообщения в качестве примера сценария):Javascript/ASP.NET MVC 4 - Использование строк C# в Javascript

alert(<%: "TEST" %>); 

При выполнении этого кода, не отображается окно сообщения , С другой стороны, отображается окно сообщения с этим кодом:

alert(<%: 6 %>); 

Почему это, что я могу использовать целые числа, но не струны? Есть ли способ обойти это?

Спасибо.

ответ

5

Вы должны добавить кавычки строки; в противном случае браузер видит alert(TEST);, что неверно. Чтобы предотвратить атаки на межсайтовый скриптинг, вам также необходимо правильно сбежать от специальных символов. Вызов HttpUtility.JavaScriptStringEncode позволяет сделать оба:

alert(<%= HttpUtility.JavaScriptStringEncode("TEST", true) %>); 

Примечание: Если этот фрагмент JavaScript появляется внутри атрибута HTML, как onclick, возможно, потребуется изменить <%= к <%: так, что двойные кавычки также HTML закодирован.

0

Почему я могу использовать целые числа, но не строки?

Потому что вам нужно поставить строки в кавычках :

alert("<%: "TEST" %>"); 

Ключ здесь, как всегда, это посмотреть на то, что на самом деле получает браузер. С исходным кодом, что браузер видит:

alert(TEST); 

... который пытается использовать переменнойTEST, а не символьную строку.

В приведенном выше примере я предположил, что строка не будет содержать " в ней или других вещах, которые недопустимы в строковом литерале JavaScript. Обычно это не хорошее предположение.

Если вы используете последнюю версию .Net или используете JSON.Net (см. Подробности this question), вы можете вывести строку с помощью сериализатора JSON, который будет гарантировать, что что-нибудь в нем может быть проблематичным правильно кодируются/бежал. Например, с JSON.Net, вы могли бы использовать:

// With JSON.Net 
alert(<%: JsonConvert.ToString("TEST") %>); 

// With a recent version of .Net 
alert(<%: HttpUtility.JavaScriptStringEncode("TEST", true) %>); 
+0

Помог ли downvoter поделиться тем, почему выше «не полезно» (использовать фразу из кнопки downvote)? –

0

Проблема заключается в том, как это выражается в JavaScript:

alert(<%: "TEST" %>); 

становится

alert(TEST); 

Это проблема, потому что она предполагает, что есть переменная с именем TEST, что вы хотите, чтобы отобразить значение, но, скорее всего, TEST не определено.То, что вы, вероятно, хотите сделать это:

alert('<%: "TEST" %>'); 

Но поскольку это MVC 4, вы можете использовать метод Json.Encode быть немного чище, как это:

alert(<%: Json.Encode("TEST") %>); 

Оба thse переведет в

alert('TEST'); 

Это должно отображать окно сообщения со строкой 'TEST'.

Смежные вопросы