Ответ 1
Вам нужно обернуть его в псевдоэлемент <text>
. Это переключит синтаксический анализатор обратно в html-режим и затем проанализирует javascript как часть html, а не С#. Причина, по которой это происходит, заключается в том, что @for()
является блоком С#, и все, что обрабатывается внутри, также считается С#, пока оно не экранируется тегом html. Поскольку вы, вероятно, не хотите, чтобы бритва html-тега отображала тег <text>
для переключения режимов.
Если вы заметили разницу в ваших веб-формах asp.net, вы заканчиваете строку <% for
с помощью %>
, которая выводит ее из режима С#. Если вы загрузите расширение ярлыка бритвы для 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>