«Ожидаемое выражение» с <% = foo%> внутри JavaScript в файле .aspx - PullRequest
7 голосов
/ 15 декабря 2009

У меня есть такой код в файле .aspx:

<script type="text/javascript" language="javascript">
function init()
{
     <%= x %>
}

Работает нормально (x - это строка, которая будет связана с некоторым JavaScript во время выполнения), но при компиляции я получаю предупреждение "Ожидаемое выражение" на <% = </p>

Я знаю, что это не самый хороший код в мире, но есть разные исторические фрагменты кода, которые любят вставлять небольшие кусочки JavaScript на страницу. Все совершенно невинно:)

Ответы [ 6 ]

14 голосов
/ 15 декабря 2009

Предупреждение происходит, потому что блок кода находится внутри блока JavaScript <script>; компилятор пытается уметь распознавать разницу между HTML / элементами управления и JavaScript.

Хотя это немного уродливо, вы должны быть в состоянии устранить предупреждение, используя eval('<%= x %>')

Вы также можете взглянуть на статью, которую я написал об использовании ASP.NET для создания динамического JavaScript: http://www.12titans.net/p/dynamic-javascript.aspx

2 голосов
/ 15 декабря 2009

Я делал это раньше и не было проблем. Тем не менее, я использую jQuery $ (document) .ready () вместо init (). Но я не думаю, что это должно быть проблемой.

Какой тип данных x? Если это строка, попробуйте заключить ее в одинарные кавычки, а если это число, используйте функцию разбора для этого типа данных.

<script type="text/javascript" language="javascript">
var s;
var n;
function init()
{
     s = '<%= x %>';
     n = parseInt('<%= x %>');
     eval('<%= x %>'); /* Raw Javascript */
}
</script>

Еще одна проблема - уровень доступа к собственности. Веб-формы ASP.NET не могут получить доступ к закрытым полям непосредственно из кода. Доступ должен быть защищенным или общедоступным.

Функция Eval Javascript

2 голосов
/ 15 декабря 2009

Если все, что вы делаете, это добавляете javascript на свою страницу, вы можете использовать RegisterClientScriptBlock для создания сценария на стороне сервера и затем позволить ему вывести его на страницу.

Таким образом, вам не нужно иметь никаких серверных сценариев на своей странице и все накладные расходы, связанные с этим.

2 голосов
/ 15 декабря 2009

Visual Studio проверяет разметку HTML на странице. Строго говоря, символ «<» не является допустимым XHTML. Это предупреждение может быть вызвано ограничением проверки, поскольку Visual Studio интерпретирует символ «<» внутри javascript как значение «меньше чем»! </p>

Очевидно, что эти встроенные выражения не являются допустимым клиентским кодом. Изменить параметры проверки HTML можно в меню Сервис | Параметры | Текстовый редактор | HTML. Имейте в виду, может быть, лучше просто игнорировать эти предупреждения, а не проверять HTML 4.01 или полностью отключить проверку.

2 голосов
/ 15 декабря 2009

Если вы хотите быть совершенно легальным, используйте литерал:

<asp:Literal ID="litX" runat="server"></asp:Literal>

и установите его Text на весь блок <script type="text/javascript" language="javascript">...</script> на стороне сервера.

0 голосов
/ 26 апреля 2013

Я обнаружил проблему с этим.

Кажется, я неправильно прокомментировал HTML над скриптом.

 <%--  <div id="directionpanel" ></div>--%>

<script type="text/javascript">
    var LIST = <%= getJson()%>;
</script>

Я получал предупреждение об ожидаемом выражении для getJson ()

Правильное комментирование HTML исправит предупреждение.

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