【问题标题】:Parameters are not binding the empty values when an empty value is passed from Jquery Ajax POST request in Asp.net core mvc project当从 Asp.net 核心 mvc 项目中的 Jquery Ajax POST 请求传递空值时,参数不绑定空值
【发布时间】:2023-01-25 16:11:15
【问题描述】:
在下面的代码中,我为“FirstName”传递了一个空值。当在控制器端发出 Ajax POST 请求时,“FirstName”参数值为 Null,但如果我传递任何值,该值将绑定到参数。仅对于空值,该值在 asp.Net 核心项目中显示为 null
Java脚本:
var dataVal = {};
dataVal["FirstName"] = "";
$.ajax({
type: "POST",
"url":url,
data:dataVal,
dataType: "json",
async: false,
success: function (m) {
if(m){
alert(m);
}
},
error: function(err){
}
});
控制器:
public IActionResult Home(string FirstName){
}
【问题讨论】:
标签:
jquery
asp.net
ajax
asp.net-mvc
asp.net-core
【解决方案1】:
当FirstName的ajax发送请求是""时,你想在控制器中接收""而不是null吗?
对此的解释如下:
这仅仅是因为MVC 2.0 默认将字符串初始化为 null。更准确地说,如果一个空字符串意味着没有值,那么 .NET 设置它的默认值。并且默认字符串(属于引用类型)为空。因此,如果请求中未提供任何值,ModelBinder 会将属性设置为其默认值。
参考这个link。
注意力:上面提供的链接是关于 Asp.net MVC 的,有些方法在 .Net Core 中不起作用。例如,有人提供了一种方法将bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;更改为在controller中接收"",但是在asp.net core的文档中:
获取一个值,该值指示是否转换为空字符串
值或仅包含空白字符的值到 null 时
将模型表示为文本。
public abstract bool ConvertEmptyStringToNull { get; }
ConvertEmptyStringToNull 只有一个get 方法,所以你不能改变它。
【解决方案2】:
在上述操作方法上使用 [HttpPost] 属性并将默认值设置为字符串参数。以下代码供参考
[HttpPost]
public IActionResult Home(string FirstName=""){
}