我有一个 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
值。
问题:
- 为什么会出现这种行为?
- 如何获得我的期望值?
最佳答案
默认情况下,DefaultModelBinder
会将空字符串解释为 null
。您可以使用 DisplayFormatAttribute
的 ConvertEmptyStringToNull
属性将该属性绑定(bind)为空字符串。
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string ItemDesc { get; set; }
关于Javascript 将 null 传递给 MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53220636/