Как избежать, чтобы 'пустой указатель' представил в виде строки при привязке данных JSON по стороне клиента

Полагаю, в вашей html-форме нет скрытого поля _csrf, которое автоматически генерируется стандартными виджетами Yii2.

Таким образом, минимальный код вашей пользовательской формы может быть таким:

<form method="post">
    <input type="hidden" name="<?= Yii::$app->request->csrfParam; ?>" value="<?= Yii::$app->request->csrfToken; ?>" />
    <button type="submit"> Save </button>
</form>
6
задан Valentin Vasilyev 23 June 2009 в 08:23
поделиться

3 ответа

Вы можете настроить пользовательскую сериализацию (см.

Как реализовать пользовательскую сериализацию JSON из веб-службы ASP.NET? )

Вы также можете создать свою собственную версию val который преобразует null в пустую строку. Однако я думаю, что метод, который вы в настоящее время используете, в любом случае, вероятно, лучше - общие методы могут добавить много сложности и, возможно, скрыть ошибки.

2
ответ дан 17 December 2019 в 02:32
поделиться

Я часто спрашиваю себя, в какой момент данные неверны? Неправильно ли говорить, что TypeId имеет значение null (неизвестно, не назначено), когда он должен быть специально назначен »(пустая строка)?

В этом случае я бы не догадался, что неверно, так это то, как в презентации отображается« null ", вам нужно просто пустое текстовое поле или что-то в этом роде. В этом случае его задача - преобразовать данные в приемлемое представление. Следовательно, ваше использование слова «слияние» кажется мне правильным.

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

1
ответ дан 17 December 2019 в 02:32
поделиться

Вы можете изменить jtemplate, чтобы он возвращал пустую строку вместо null, изменив следующую строку кода в jquery.jtemplate.js.

Сначала найдите эту функцию

TemplateUtils.cloneData = function(d, filter, f_escapeString) {

Следующим блоком кода является оператор if

if (d == null) {
    return d;
}

Измените его на

if (d == null) {
   return "";
}

И он должен сделать это

3
ответ дан 17 December 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: