Javascript передает ноль в MVC Controller - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть код Javascript, передающий объект, смоделированный точно так же, как мой объект C # CreateItemModel. Однако проблема в моем коде контроллера - это свойство, которое было установлено в javascript как new String(); и десериализовано в C # как null.

Javascript код

$('[step="4"]').click(function () {
    //shortened for brevety
    var _model = new Object();
    _model.ItemDesc = new String();

    $.ajax({
        type: "POST",
        url: 'CreateItem',
        data: _model,
        success: function (msg) {

            status = JSON.stringify(msg);
            console.log(msg);
        },
        error: function (msg) {

            status = JSON.stringify(msg);
            console.log(msg);
        }
    });
});

C # Код контроллера

[HttpPost]
public async Task<JsonResult> CreateItemCallAsync(CreateItemModel item)
{
   //breakpoint here 
   var test = item.ItemDesc; //the property is null here
}

Я ожидал здесь значение string.empty, но вместо этого я получаю значение null. Я попытался установить _model.ItemDesc в '' "" new String() в своем коде Javascript. Но всегда получаю null значение.

Вопросы:

  1. Почему происходит такое поведение?
  2. Как получить ожидаемое значение?

Ответы [ 2 ]

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

По умолчанию DefaultModelBinder будет интерпретировать пустые строки как null. Вы можете использовать свойство ConvertEmptyStringToNull DisplayFormatAttribute, чтобы привязать свойство как пустую строку.

[DisplayFormat(ConvertEmptyStringToNull = false)]
public string ItemDesc { get; set; }
0 голосов
/ 09 ноября 2018

Попробуйте изменить имя item на _model

    [HttpPost]
    public async Task<JsonResult> CreateItemCallAsync(CreateItemModel _model)
    {
       //breakpoint here 
       var test = _model.ItemDesc; //the property is null here
    }

Также добавьте свойства contentType и dataType к вашему запросу ajax.

$.ajax({
        type: "POST",
        contentType: "application/json",
        dataType: "json",
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...