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

时间:2011-05-24 15:56:37

标签: c# javascript jquery asp.net-mvc-3

我希望我的模型的部分可以访问我的页面的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"字符串。

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

2 个答案:

答案 0 :(得分:1)

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

让客户端错误地使用“null”并不意味着客户端无法使用空值进行请求。

整个AJAX概念都缺乏正确的验证,人们正在将验证推向客户端层面。 这是错误的。这意味着将来会有更多隐藏的服务器错误(各种黑客都可以利用)。

答案 1 :(得分:0)

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