Javascript将null传递给MVC控制器

时间:2018-11-09 06:05:34

标签: javascript c# asp.net-mvc

我有一个Javascript代码,其传递的对象与我的C#对象完全相同 CreateItemModel。但是,问题是在我的Controller代码中,一个在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值。我尝试在Javascript代码中将_model.ItemDesc设置为'' "" new String()。但始终获得null值。

问题:

  1. 为什么会发生这种行为?
  2. 如何获得我的期望值?

2 个答案:

答案 0 :(得分:3)

默认情况下,DefaultModelBinder会将空字符串解释为null。您可以使用ConvertEmptyStringToNull的{​​{1}}属性使该属性绑定为一个空字符串。

DisplayFormatAttribute

答案 1 :(得分:0)

尝试将名称item更改为_model

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

还向您的Ajax请求中添加contentTypedataType属性。

$.ajax({
        type: "POST",
        contentType: "application/json",
        dataType: "json",