我的MVC网站遇到了绑定问题。
发送以下 ajax 请求:
var arguments = {
search: "test",
skipCount: 0,
range: 20,
filter: getFilter()
};
$.ajax({
url: "HTMLSearchResult",
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: arguments,
success: function (response) {
//Showing search results.
}
});
获取过滤器函数:
function getFilter() {
var filter = {},
fromDate = $('#TodoSearchFilter_From').val(),
toDate = $('#TodoSearchFilter_To').val();
if (fromDate)
filter.From = new Date(Date.parse(fromDate));
else
filter.From = null;
if (toDate)
filter.To = new Date(Date.parse(toDate));
else
filter.To = null;
filter.Assigned = $('#TodoSearchFilter_Assigned').val() == 'true';
filter.NotAssigned = $('#TodoSearchFilter_NotAssigned').val() == 'true';
filter.Services = $('#TodoSearchFilter_Services').val() == 'true';
filter.WorkOrders = $('#TodoSearchFilter_WorkOrders').val() == 'true';
filter.Booked = $('#TodoSearchFilter_Booked').val() == 'true';
filter.NotBooked = $('#TodoSearchFilter_NotBooked').val() == 'true';
return filter;
}
请求已正确发送(通过 Fiddler2 控制),但控制器无法正确接收它。"搜索","跳过计数"和"范围"已正确填充。
下面是浏览器中的控制台和 Visual Studio 中的调试器的打印:
https://i.stack.imgur.com/BEPP6.png
为什么此绑定不起作用?
我也尝试使用JSON.stringify,但没有任何成功。我觉得既然前 3 个参数发送正确,那么第四个参数也应该正确发送。
我只通过将过滤器转换为 JSON 字符串来解决它。
var arguments = {
search: searchString,
skipCount: skipCount,
range: range,
filter: JSON.stringify(getFilter())
};
然后在控制器上接收它时,我使用 JsonConvert.DeserializeObject 来创建我需要的对象。
看起来像一个黑客,但至少它现在工作正常。