Я передаю пустое значение в панель просмотра Репрезентативтипсплист, но пытаюсь понять, почему строка
if ('@representativeTypesList' != null)
не оценивается правильно, и курсор переходит прямо к части Html.Raw в представлении ниже. Я считаю, что правильно поставил символы @. Любая помощь будет очень высоко ценится.
@{
var representativeTypesList = @ViewBag.RepresentativeTypesList;
}
@section Header {
<script type = "text/javascript">
if ('@representativeTypesList' != null)
{
var array1 = '@Html.Raw(
Json.Encode(
((IEnumerable<RepresentativeTypesModelView>)ViewBag.RepresentativeTypesList).Select(item => new
{
itemValue = (item.Value == null ? "" : item.Value),
itemText = (item.Name == null ? "" : item.Name)
})
)
)';
hdninput1 = $("#txtSalesReps_hdn");
dropdown1 = $("#selSalesReps");
dropdown1.append($("<option />").val('default').text('-- '@lbls.lblSelectOption' --'));
if (array1.length > 0)
{
$.each(array1, function() {
dropdown1.append($("<option />").val(this.itemValue).text(this.itemText));
});
}
}
</script>
}
Вы сравниваете строку «@presentativeTypesList» с нулевым значением, поэтому она определенно перейдет в необработанный HTML-код напрямую, попробуйте создать такое условие, как это: «@presentativeTypesList»! == 'null'
Привет, извините, но репрезентативныйTypesList содержит объект ModelView, а не строку.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Потенциально удалите отметки с обеих сторон @presentativeTypesList, возможно, он оценивает строку как ненулевую вместо того, чтобы оценивать переменную как нулевую.
Привет, спасибо, но поведение такое же. Есть еще какие-нибудь подсказки? Спасибо.
Razor используется только для создания начальной разметки. После визуализации страницы (т.е. когда вы запускаете javascript в клиенте, а не готовите его на сервере), '@representativeTypesList' будет рассматриваться как жестко закодированная строка в том виде, в каком она существовала при визуализации, она не будет рассматриваться как переменная javascript.
Вместо этого почему бы не объявить переменную javascript и установить ее начальное значение с помощью Razor:
var repTypesList = @representativeTypesList;
if (repTypesList !== null) {
...
}
Затем вы можете изменить значение во время выполнения и т. д.
Привет, я на самом деле пробовал это раньше, но без радости. Даже если я помещаю ViewData в контроллер и устанавливаю для него значение, отличное от значения в этом операторе if, курсор полностью пропускает его. Очень странно.
Можете ли вы просто передать объект ViewBag в код без предварительного преобразования его в переменную? Это должно сработать, если нет особой причины, по которой вам это нужно. Как сказал Elemental Pete, Razor используется только для создания начальной разметки. Razor НИКОГДА не отправляется в браузер. Обрабатывается на сервере. Затем он отображает все, что ему сказано для визуализации, в коде HTML, CSS, JS, и это затем отправляется в браузер. Затем браузер запускает код JS. Подумайте о своем коде таким образом, и я бы попробовал заменить
если ('@presentativeTypesList'! = ноль)
с участием
если (@ ViewBag.RepresentativeTypesList! = ноль)
Надеюсь, это поможет!
Джейсон
Привет, я замечаю, что если я помещаю это в начало инструкции, он оценивается: @ (ViewBag.RepresentativeTypesList! = Null? HaveEmpty = 0: haveEmpty = 1). Но если я затем использую hasEmpty в операторе if, он будет пропущен. Я думаю, что ключом к разгадке является @ char вне скобок, но если я сделаю это в исходном коде, поставлю @if, это испортит весь оператор с ошибками, например, IEnumerable - это тип, который недействителен в данном контексте или name Репрезентативный список типов не существует в данном контексте.
Решение было дано здесь Использование Razor в JavaScript. Поскольку мой код находится внутри js-раздела, он должен быть окружен «текстовыми» тегами. Спасибо.
Я просто попробовал следующее в своем коде, и это сработало. Сравните это со своим кодом.
В контроллере:
public ActionResult SomeMethod(int id)
{
ViewBag.RepresentativeTypesList = null;
}
В представлении:
@{
var representativeTypesList = ViewBag.RepresentativeTypesList;
}
@section Header {
<script type = "text/javascript">
if ('@representativeTypesList' != null)
{
if (array1.length > 0)
{
$.each(array1, function() {
dropdown1.append($("<option />").val(this.itemValue).text(this.itemText));
});
}
}
</script>
}
Мне пришлось изменить код в операторе if, поскольку у меня не было некоторых объектов, которые были у вас, но когда я запустил его, он прыгнул, пропустил оператор if и не запустил ни один из них.
Дайте знать, если у вас появятся вопросы!
Джейсон
Кроме того, если это или какие-либо решения вопросов, которые у вас здесь есть, работают или помогают, убедитесь, что вы отметили ответ как правильный, если это ваши вопросы или нет, но ответ полезен, пожалуйста, нажмите стрелку вверх, чтобы указать, что это было полезный. Благодарю вас! :)
if (@representativeTypesList != null)