Asp.Net MVC3 RC Razor views: синтаксис для встраивания кода внутри блока <javascript>

Не удалось вставить код С# внутри блока javascript с помощью MVC3 RC1 бритвы. Какой синтаксис я должен использовать, чтобы заставить это работать? Например, я получаю предупреждения. Ожидаемая константа в переменной isOk среди других. (Без текстового тега следующий код не распознается как javascript)

@{bool isOk = true;}

<script type="text/javascript">
    var tmp1 = "";
    @if (isOk)
    { 
        <text>
            var tmp=""; // this should be interpreted as javascript
        </text>       
    }
</script>

Ответы

Ответ 1

Тег <text> нужен, чтобы указать, что содержимое не оценивается на сервере. Например:

@{
    var isOK = true;
}

<script type="text/javascript">
    var tmp1 = "";
    @if (isOK)
    { 
        <text>
            var tmp = "foo";
        </text>       
    }
</script>

будет выводиться на результирующей странице:

<script type="text/javascript">
    var tmp1 = "";
    var tmp = "foo";
</script>

Что касается предупреждения Expected Constant, хорошо, Razor Intellisense все еще находится в состоянии бета-версии, так что он далеко не идеален. Это просто предупреждение, которое вы можете спокойно игнорировать. Важно то, что приложение работает и испускает действительный HTML. Надеюсь, что это будет исправлено в конечном продукте. Из личного опыта единственными предупреждениями, которые я доверяю, является тот, который испускается компилятором С#. Когда я работаю в представлении, я спокойно игнорирую все дерьмовые предупреждения, которые Visual Studio испускает, потому что я знаю, что это неправильно.

Ответ 2

Альтернативой (более простой и понятной для ИМО) является выход из текста в следующем виде:

<script type="text/javascript"> 
    var tmp1 = ""; 
    @if (isOK) 
    {  
        @:var tmp = "foo";
    } 
</script>