Javascript 将 null 传递给 MVC Controller

标签 javascript c# asp.net-mvc

我有一个 Javascript 代码传递一个与我的 C# 对象建模完全相同的对象 创建ItemModel。但是,问题出在我的 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# Controller 代码

[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. 如何获得我的期望值?

最佳答案

默认情况下,DefaultModelBinder 会将空字符串解释为 null。您可以使用 DisplayFormatAttributeConvertEmptyStringToNull 属性将该属性绑定(bind)为空字符串。

[DisplayFormat(ConvertEmptyStringToNull = false)]
public string ItemDesc { get; set; }

关于Javascript 将 null 传递给 MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53220636/

相关文章:

javascript - 通过 MediaStream Recording API 对 Canvas 元素进行视频捕获不起作用

javascript - 在更改时在两个下拉菜单之间传递值。无需点击即可更新

c# - 合并项目列表中的子项目

c# - First <>扩展方法是否有安全版本?

c# - 在 C++ 中部署 GBM 模型 |让 Predict.gbm 在 R 之外工作

c# - 项目构建但无法发布

c# - 从 Controller 继承并重定向

javascript - 在 jquery.load 页面中使用 angularjs

c# - 从 SQL Server 2008 R2 优化层次结构的内存缓存

Javascript - 将嵌套数组转换为数组对象