Бритва синтаксис и JavaScript
-
27-09-2019 - |
Вопрос
В качестве теста я преобразующую доказательство приложения 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>