Проверьте значение viewbag на null в javascript под кодом бритвы

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

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>
}
if (@representativeTypesList != null)
Shyju 05.11.2018 18:36

Вы сравниваете строку «@presentativeTypesList» с нулевым значением, поэтому она определенно перейдет в необработанный HTML-код напрямую, попробуйте создать такое условие, как это: «@presentativeTypesList»! == 'null'

Amro Mustafa 05.11.2018 20:14

Привет, извините, но репрезентативныйTypesList содержит объект ModelView, а не строку.

MikeG001 05.11.2018 23:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
154
5

Ответы 5

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

Привет, спасибо, но поведение такое же. Есть еще какие-нибудь подсказки? Спасибо.

MikeG001 05.11.2018 18:49

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

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

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

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

Привет, я на самом деле пробовал это раньше, но без радости. Даже если я помещаю ViewData в контроллер и устанавливаю для него значение, отличное от значения в этом операторе if, курсор полностью пропускает его. Очень странно.

MikeG001 05.11.2018 18:56

Можете ли вы просто передать объект 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 Репрезентативный список типов не существует в данном контексте.

MikeG001 05.11.2018 19:10

Решение было дано здесь Использование 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 и не запустил ни один из них.

Дайте знать, если у вас появятся вопросы!

Джейсон

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

Другие вопросы по теме