我希望我的模型的部分可以访问我的页面的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()
值的另一种简单方法?
答案 0 :(得分:1)
这绝对是你应该在你的服务器上做的事情,而不是客户端。
让客户端错误地使用“null”并不意味着客户端无法使用空值进行请求。
整个AJAX概念都缺乏正确的验证,人们正在将验证推向客户端层面。 这是错误的。这意味着将来会有更多隐藏的服务器错误(各种黑客都可以利用)。
答案 1 :(得分:0)
我没有找到答案,所以我不得不在服务器上用空字符串手动替换空值。