我希望我的模型部分可以被我页面的 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>
一切正常,但有一部分:过滤器
的字符串属性不是null
,而是"null"
。我还没有触及我的 JavaScript 中的 filter
变量
型号:
public class SellOffersFilter
{
public int MinAge { get; set; }
public string Country { get; set; }
public string City { get; set; }
}
Controller :
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
?或者通过 jQuery.ajax()
传递 null
值的另一种简单方法?
最佳答案
这绝对是您应该在服务器上而不是在客户端上执行的操作。
让客户端不错误地使用“null”并不意味着客户端不能使用空值进行请求。
整个 AJAX 概念缺乏适当的验证,人们将验证推到客户端级别。 这是错误的。这意味着将来会有更多隐藏的服务器错误(供各种黑客利用)。
关于c# - jQuery.ajax() 发送的空值绑定(bind)到模型中的 "null"字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6113257/