Visual Studio запутался по серверному коду внутри javascript

У меня возникла раздражающая проблема: следующий код дает предупреждение в Visual Studio.

<script type="text/javascript">
var x = <%: ViewData["param"] %>;
</script>

Предупреждение - "Ожидаемое выражение". Visual Studio запутывается, и весь код javascript после этого дает массу предупреждений. Конечно, все предупреждения, и он отлично работает во время исполнения, но очень легко пропустить настоящие предупреждения среди десятков ложных срабатываний.

Он работал аналогично в VS2008, и он не был зафиксирован в VS2010. Кто-нибудь знает, есть ли способ обхода или патч?

Ответ 1

Вот что я получил от Microsoft:

К сожалению, это связано с ограниченным дизайном нашего редактора. У нас было много пользователей, обеспечивающих такую ​​же обратную связь, но на данный момент у нас нет хорошего решения, кроме как избежать создания клиентского сервера script на стороне сервера. Мы рассмотрим эту проблему при планировании следующей версии Visual Studio.

Ответ 2

Вам нужно обернуть выражение на стороне сервера в кавычках.

<script type="text/javascript">
var x = "<%: ViewData["param"] %>";
</script>

Ответ 3

Вы можете обмануть среду IDE с помощью кавычек или комментариев в строке

исходный код:

    <script type="Text/javascript">
    <%If Page.IsPostback Then%>
    alert("my javascript code");
    <%End If%>
    </script>

решение:

    <script type="Text/javascript">
    //<%If Page.IsPostback Then%>
    alert("my javascript code");
    //<%End If%>
    </script>

Ответ 4

Подход, который вы принимаете, не является особенно прочным. Очевидно, что это не сработает, если вы захотите переместить свой Javascript-код в отдельный файл, чтобы улучшить время загрузки страницы....

Вам лучше использовать скрытые поля формы для перемещения данных с сервера на клиентский script. В качестве альтернативы, вы можете скомпоновать код JS с изменяемым параметром, выполнив кучу конкатенации строк, затем используя метод ClientScriptManager.RegisterClientScriptBlock(), чтобы ввести его в вывод.

Ответ 5

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

Как визуальная студия может знать, что находится внутри строки, которую вы передаете?, ее параметры, ее больше кода, что это такое???.... Как VS может знать, что это такое может ли это так поступить?

Поэтому они решают, что все в теге script должен быть JavaScript.

Мое мнение состоит в том, что если вы выиграли, чтобы избежать этой ошибки, Write отрисует этот JavaScript на код позади, а не внутри страницы aspx.

string cPlaceMeOnScript = "<script type=\"text/javascript\">var x =" + ViewData["param"] +";</script>"

и использовать любой метод для размещения этой строки в начале вашего script.

Ответ 6

Я не могу поверить, как много ответов говорят "Положите JavaScript вместо кода". Это очень плохая идея и путает ваш код, смешивая презентацию с бизнес-логикой. Как заявил первоначальный плакат, это всего лишь предупреждение. В то время как раздражает, это не стоит смешивать ваше презентационное поведение с вашим кодом на стороне сервера (a.k.a., пишущий плохой код).

Ответ 7

Это не стандартное поведение, и это происходит случайным образом, и в такой ситуации просто переименование файла и последующее его построение помогут (и возможно, что даже без его построения будет разрешено), и вы можете затем вернитесь назад.

Вы также можете полностью отключить предупреждения на Java Script в меню Инструменты → Параметры → Текстовый редактор → JScript → Разное.

Конечно, в этом случае вы пропустите предупреждения Java Script, но по крайней мере вы сможете сосредоточиться на предупреждениях на стороне сервера.