Razor / JavaScript и конечная точка с запятой
используя Visual Studio 2012, на странице просмотра Razor, в разделе JavaScript, я получаю то, что я думаю, это битва между синтаксисом Razor и синтаксисом JavaScript. В частности, конечная точка с запятой в разделе скрипта помечается intellisense и выдается предупреждение компилятора (не ошибка):
предупреждение 13 синтаксическая ошибка'.
если я удалю его, то я получаю рекомендацию о прекращении действия инструкции (для ReSharper в этом случае, но просто хорошая практика).
<script type="text/javascript">
$().ready(function(){
var customer = @Html.Raw(ViewBag.CustomerJSON); // <- Razor (I think) doesn't like this semicolon
});
</script>
это ошибка в бритве? Если да, то есть ли способ переписать это, чтобы избежать этой проблемы?
7 ответов:
это ошибка в бритве?
абсолютно нет. Запустите приложение, и оно будет работать, как ожидалось.
это ошибка в инструментах, которые вы используете (Visual Studio 2012, ReSharper, ...) которые не способны распознать совершенно правильный синтаксис и предупредить вас о чем-то, о чем вы не должны быть предупреждены. Вы можете попробовать открыть проблему на сайте Microsoft Connect и сигнализировать об этой ошибке, если это еще не было сделано.
то, что я использую в качестве обходного пути, - это использовать дополнение на стороне клиента в конце. Для меня эта ошибка произошла при определении" целочисленной " константы, поэтому
window.foo = @(Model.Something);
дал мне старую добрую точку с запятой ошибка. Я просто изменил это на:
window.foo = @Model.Something + 0;
(в заявленном случае вопросов вы должны просто быть в состоянии добавить ", так + ".
Я знаю, что на клиенте происходит еще одно дополнение, и это не элегантно, но это позволяет избежать ошибки. Так что используйте его или нет, но я предпочитаю это видеть предупреждение/ошибку.
Если кто-то знает о синтаксическом обходном пути на стороне сервера для этого, я бы предпочел это на стороне клиента, поэтому, пожалуйста, добавьте.
Я обнаружил, что обертывание синтаксиса Razor в функции идентификации JavaScript также делает IDE счастливой.
<script type="text/javascript"> @* I stands for Identity *@ function I(obj) { return obj; } $().ready(function(){ var customer = I(@Html.Raw(ViewBag.CustomerJSON)); }); </script>
<script type="text/javascript"> $().ready(function(){ var customerName = ('@ViewBag.CustomerName'); // <- wrap in parens }); </script>
разве это не так просто, как обертывание в скобках? Ввод значений через консоль, похоже, работает нормально без побочных эффектов.
это работает для строк, но это все равно дает ошибку для необращающихся значения, но я все еще люблю это для строковых значений. Для чисел вы можете просто использовать
parseInt('@Model.TotalResultCount', 10)
.