нулевые значения, отправленные jQuery.ajax (), привязаны к «нулевым» полям в модели - PullRequest
2 голосов
/ 24 мая 2011

Я хочу, чтобы часть моей модели была доступна для JavaScript моей страницы, поэтому я включаю в модель следующий тег сценария:

<script type="text/javascript">
var filter = @Html.Raw(@Json.Encode(Model.Filter));
</script>

Объект filter является фильтром для последующих запросов, которые выполняются через AJAX:

<script type="text/javascript">
function DownloadData() {
    $.ajax({
        url: '@Url.Action("GetData")',
        type: "POST",
        data: filter,
        success: function (data) {
        }
    });
}
</script>

Все работает нормально, но с одной стороны: строковые свойства filter не null, а "null". Я еще не трогал переменную filter в моем JavaScript

Модель:

public class SellOffersFilter
{
    public int MinAge { get; set; }
    public string Country { get; set; }
    public string City { get; set; }
}

Контроллер:

public ActionResult SellOffersGetPage(SellOffersFilter filter)
{
    //here both filter.Country and filter.City are equal to "null"
}

Форма POST выглядит как MinAge=0&Country=null&City=null, а отладчик JavaScript показывает, что filter.Country равен null, а не "null".

Есть ли способ заставить jQuery не упаковывать поля фильтра в запрос POST, если они null? Или другой простой способ передать null значения через jQuery.ajax()?

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Это определенно то, что вы должны делать на своем сервере, а не на клиенте.

Если клиент по ошибке не использует значение «ноль», это не означает, что клиент не может выполнить запрос с нулем.значения.

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

0 голосов
/ 06 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...