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

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

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

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

10
Felix 6 Июн 2010 в 11:36

7 ответов

Лучший ответ

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

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

2
Felix 1 Июл 2010 в 21:32

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

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

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

0
yoel halb 16 Янв 2013 в 18:56

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

0
undeniablyrob 22 Ноя 2011 в 17:22

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

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

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

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

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

И используйте любой метод, чтобы поместить эту строку в начало вашего скрипта.

0
Aristos 6 Июн 2010 в 08:25

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

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

0
Warren Rumak 6 Июн 2010 в 08:20

Вы можете обмануть 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>
2
OriNet 29 Ноя 2011 в 19:27

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

<script type="text/javascript">
var x = "<%: ViewData["param"] %>";
</script>
3
Dustin Laine 6 Июн 2010 в 07:48