Проверьте нулевую viewbag в javascript под кодом бритвы - PullRequest
0 голосов
/ 05 ноября 2018

Я передаю значение null в viewBag для TemplateTypesList, но пытаюсь понять, почему строка

if ('@representativeTypesList' != null)

вычисляется неправильно, и курсор движется прямо к части Html.Raw вида ниже. Я считаю, что правильно поставил символы @ escape. Буду очень признателен за любую помощь.

@{
    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>
}

Ответы [ 5 ]

0 голосов
/ 07 ноября 2018

Я просто попробовал следующее в моем коде, и это сработало. Сравните это с вашим кодом.

В контроллере:

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 и не выполнил ни одного из них.

Дайте мне знать, если у вас есть какие-либо вопросы!

Jason

Также, если это или какие-либо решения для вопросов, которые у вас есть здесь, работают или помогают, пожалуйста, убедитесь, что вы отметили ответ как правильный, если это ваши вопросы или если нет, но ответ полезен, пожалуйста, нажмите стрелку вверх, чтобы указать что это было полезно. Благодарю вас! :)

0 голосов
/ 06 ноября 2018

Решение было дано здесь Использование Razor в JavaScript . Поскольку мой код находится внутри секции js, он должен быть окружен «текстовыми» тегами. Спасибо.

0 голосов
/ 05 ноября 2018

Razor используется только для создания начальной разметки. После отображения страницы (т. Е. После запуска javascript на клиенте вместо подготовки его на сервере) '@representativeTypesList' будет выглядеть как жестко закодированная строка, так как она существовала на момент отображения, она не будет видна как переменная JavaScript.

Вместо этого, почему бы не объявить переменную javascript и установить ее начальное значение с помощью Razor:

var repTypesList = @representativeTypesList;
if (repTypesList !== null)  {
    ...
}

Затем вы можете изменить значение во время выполнения и т. Д.

0 голосов
/ 05 ноября 2018

Можете ли вы просто передать объект ViewBag в код, не приведя его сначала к переменной? Это должно работать, если только для этого нет особой причины. Как сказал Элементаль Пит, Razor используется только для создания начальной разметки. Бритва НИКОГДА не отправляется в браузер. Обрабатывается на сервере. Затем он отображает все, что ему говорят, в HTML, CSS, JS-коде и затем отправляется в браузер. Затем браузер запускает код JS. Подумайте о вашем коде, и я попробую заменить

if ('@represenlativeTypesList'! = Null)

с

if (@ ViewBag.RepresenlativeTypesList! = Null)

Надеюсь, это поможет!

Jason

0 голосов
/ 05 ноября 2018

Потенциально удалите отметки с обеих сторон @represenlativeTypesList, возможно, он оценивает строку как ненулевую вместо оценки переменной как нулевой.

...