Неполный тег сценария JS с RegisterClientScriptBlock

В настоящее время я пытаюсь зарегистрировать вызов функции JS со страницы .NET, которая просто вызывает небольшую функцию на странице .aspx, которая закроет окно.

Код RegisterClientScriptBlock выглядит следующим образом:

Page.ClientScript.RegisterClientScriptBlock (typeof(Page), "closeBox", "<script type='text/javascript'>closeBox();</script>");

Такого рода вещи работают в другом месте приложения на разных страницах. Однако в этом случае я получаю ошибку JS во время выполнения: Ошибка: ожидается '/', и когда я отлаживаю, конечно же, вставленный javascript:

<script type='text/javascript'>closeBox();<

Как видите, по какой-то причине он не добавил /script>! Я попытался сам оставить теги и использовал:

Page.ClientScript.RegisterClientScriptBlock (typeof(Page), "closeBox", "closeBox();", true);

но с тем же результатом.

Я также пробовал RegisterStartupScript безрезультатно.

Кто-нибудь еще сталкивался с этим раньше? Любые идеи о том, что вызывает это и о том, как это исправить?


person Ian Devlin    schedule 29.09.2009    source источник
comment
Ба, ошибка была где-то еще, но отладчик указывал на эту строку и полностью вводил меня в заблуждение. Почему я всегда обнаруживаю, что ошибка — это глупость с моей стороны, через несколько минут после того, как я обратился за помощью ко всему миру?   -  person Ian Devlin    schedule 29.09.2009
comment
Не так плохо, как ответить на него расплывчато, поскольку автор сообщает о своей икоте;)   -  person Lazarus    schedule 29.09.2009
comment
Моя икота была ранее в файле, где он выполняет некоторые вычисления Javascript при загрузке страницы, где одним из этих вычислений оказалось деление (тогда) пустой строки на 2.   -  person Ian Devlin    schedule 29.09.2009
comment
В настоящее время пытаюсь закрыть его, так как он явно больше не актуален :-)   -  person Ian Devlin    schedule 29.09.2009


Ответы (3)


Я не уверен, что это точно так же (моя память не такая, как раньше), но я думаю, что сталкивался с подобной проблемой в прошлом. Решение состояло в том, чтобы поместить несколько разделителей строк между различными частями скрипта, т.е.

Page.ClientScript.RegisterClientScriptBlock (typeof(Page), "closeBox", "<script type='text/javascript'>\n\rcloseBox();\n\r</script>");
person Lazarus    schedule 29.09.2009

Где был этот RegisterClientScriptBlock? Это было в элементе <script runat="server">?

Если это так, синтаксический анализатор aspx увидит </script> внутри вашего строкового литерала C# как конец вмещающего элемента script и остановится на этом. Если вы хотите поместить последовательность </script> внутри <script> (и это относится и к обычному JavaScript), вы должны экранировать ее, чтобы разбить последовательность. Хороший способ:

"\x3C/script"
person bobince    schedule 29.09.2009
comment
Полезно знать, спасибо! Но все это оказалось ложной тревогой, это было что-то совсем другое (как вкратце описано выше), что достаточно неловко. - person Ian Devlin; 29.09.2009

Ошибка оказалась совершенно не связанной.

person Ian Devlin    schedule 29.10.2009