Пустая строка не преобразуется в ноль при передаче объекта JSON в контроллер - PullRequest
0 голосов
/ 07 сентября 2018

В ASP.NET Core 2.1 я замечаю, что с этим вопросом происходит обратное: string.empty преобразуется в ноль при передаче объекта JSON в MVC Controller

Когда я отправляю объект JSON обратно в контроллер, у которого есть свойства с пустыми строками, они больше не преобразуются автоматически в null.

Например, возьмите этот объект JS:

 var person = {firstName:"", lastName:""}; 

        $http.post("/app/index", person)
            .then(function (response) {
                // Success
            }, function (error) {
                // Failure
            })

При привязке к модели в контроллере свойства с пустыми строками остаются как пустые строки:

    //
    // POST: /App
    [HttpPost]
    public async Task<ActionResult> Index([FromBody] AppFormDTO data)
    {
       ....
    }

Что при сохранении этого объекта в базе данных, я бы предпочел иметь значения null вместо набора пустых строк.

Они изменили DefaultModelBinder в ASP.NET Core 2.1? И если так, как я могу изменить его обратно, как это было в MVC5 - где string.empty был автоматически преобразован в null?

ОБНОВЛЕНИЕ , чтобы добавить мою AppFormDTO модель, для справки:

public class AppFormDTO
{
    public string firstName{ get; set; }
    public string lastName{ get; set; }
}

Ответы [ 3 ]

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

Добавьте это к вашей модели ЧЕЛОВЕКА для firstName / lastName:

[DisplayFormat(ConvertEmptyStringToNull = false)]
... the model values 
0 голосов
/ 07 сентября 2018

После исходного кода ASP.NET Core

 if (bindingContext.ModelType == typeof(string))
 {
      // Already have a string. No further conversion required but handle ConvertEmptyStringToNull.
      if (bindingContext.ModelMetadata.ConvertEmptyStringToNull && string.IsNullOrWhiteSpace(value))
      {
           model = null;
      }
      else
      {
           model = value;
      }
 }

Поведение по умолчанию установлено на пустую строку, равную нулю. Перепроверьте вашу модель AppFormDTO, если вы поставили ConvertEmptyStringToNull = false, что не правильно.

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

дважды проверьте, имеет ли объект json эти свойства как ноль, а не как пустую строку ...

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