由jQuery.ajax()发送的空值被绑定到“”;空”;模型中的字段

本文关键字:字段 模型 绑定 ajax jQuery 空值 | 更新日期: 2023-09-27 17:57:38

我希望我的模型部分可以被页面的JavaScript访问,所以我在模型中包含以下脚本标记:

<script type="text/javascript">
var filter = @Html.Raw(@Json.Encode(Model.Filter));
</script>

filter对象是用于后续查询的过滤器,这些查询是通过AJAX完成的:

<script type="text/javascript">
function DownloadData() {
    $.ajax({
        url: '@Url.Action("GetData")',
        type: "POST",
        data: filter,
        success: function (data) {
        }
    });
}
</script>

这一切都可以正常工作,但有一点:filter的字符串属性不是null,而是"null"。我还没有接触到JavaScript中的filter变量

型号:

public class SellOffersFilter
{
    public int MinAge { get; set; }
    public string Country { get; set; }
    public string City { get; set; }
}

控制器:

public ActionResult SellOffersGetPage(SellOffersFilter filter)
{
    //here both filter.Country and filter.City are equal to "null"
}

POST表单看起来像MinAge=0&Country=null&City=null,JavaScript调试器显示filter.Country等于null,而不是"null"字符串。

如果过滤器的字段是null,有没有办法强制jQuery不要将其打包到POST请求中?或者通过jQuery.ajax()传递null值的另一种简单方法?

由jQuery.ajax()发送的空值被绑定到“”;空”;模型中的字段

这绝对是你应该在服务器上做的事情,而不是在客户端上。

让客户端不错误地使用"null"并不意味着客户端不能使用null值进行请求。

整个AJAX概念没有达到正确的验证,人们将验证推到客户端级别这是错误的这意味着未来会有更多隐藏的服务器漏洞(供各种黑客利用)。

我没有找到答案,所以我不得不在服务器上手动用空字符串替换null值。