Вопрос

В качестве теста я преобразующую доказательство приложения Concept, мы написали из веб-форм в бритву, просто чтобы мы могли его оценить.

До сих пор я вступил в одну проблему, которая делает мою голову больно. .. Поехали на стороне клиента JavaScript ...

Веб-формы

<script type="text/javascript">
    var jqGridIdList = "<%: Url.Action ("getidlist", "office", new { area = "reports" }) %>";

    var availableIds = [];
    <% for (var i = 0; i < Model.Data.Count (); i++) { %>
    availableIds.push({ value : "<%: Model.Data.ElementAt (i).Text %>", label : "<%: Model.Data.ElementAt (i).Text %>" });
    <% } %>
</script>

Бритва синтаксис

<script type="text/javascript">
    var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";

    var availableIds = [];
    @for(var i = 0; i < Model.Data.Count (); i++) {
    availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });
    }
</script>

Компилятор дает мне следующую ошибку в строке «Доступен. Pwush»:

Сообщение об ошибке компилятора: CS1525: неверный термин экспрессии '{'

Это, очевидно, пытается скомпилировать его как C # ... но как мне это остановить?

Спасибо,
Kieron

Это было полезно?

Решение

Вам нужно обернуть его в псевдо-элемент <text>. Отказ Это выключит анализатор обратно в HTML-режим, и он будет проанализировать JavaScript как часть HTML, а не C #. Причина, по которой это происходит, это @for() Это блок AC # и все, что лечится внутри, также считается C # до тех пор, пока он не сбежит тегом HTML. Так как вы, вероятно, не хотите, чтобы бритва Tag HTML предоставляет <text> Тег для переключения режимов.

Если вы заметите разницу в вашем ASP.NET WebForms, вы заканчиваете <% for линия с А. %> который выводит его из режима C #. Если вы загружаете расширение маркировщика Razor для Visual Studio 2010, он поможет вам увидеть, когда код рассматривается как код и HTML обрабатывают как HTML.

<script type="text/javascript">
    var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";

    var availableIds = [];
    @for(var i = 0; i < Model.Data.Count (); i++) {
        <text>availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });</text>
    }
</script>

Обновление для последней версии

Теперь вы можете использовать @: синтаксис для еще более читаемости

<script type="text/javascript">
    var jqGridIdList = "@Url.Action("getidlist", "office", new { area = "reports" })";

    var availableIds = [];
    @for(var i = 0; i < Model.Data.Count (); i++) {
        @:availableIds.push({ value : "@Model.Data.ElementAt(i).Text", label : "@Model.Data.ElementAt(i).Text" });
    }
</script>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top