我有一个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
值。
问题:
答案 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请求中添加contentType
和dataType
属性。
$.ajax({
type: "POST",
contentType: "application/json",
dataType: "json",