【发布时间】:2025-12-18 01:20:07
【问题描述】:
我在使用 Jquery AJAX 作为 GET 请求时遇到问题。 由于某种原因,ASP.NET MVC 模型绑定器似乎无法绑定到我的过滤器项。发生的情况是调用了操作结果,但创建了一个空对象。
但是,如果我从 HTTP Get 更改为 HTTP Post,则它可以工作。 为什么会这样? 据我了解,使用 GET 会更好,因为服务器上没有数据发生变化。
这是我的代码的精简版:
AJAX:
$.ajax({
url: url,
contentType: 'application/json',
dataType: 'json',
type: "GET",
data: "{'filter':" + ko.toJSON(model.filter) + "}",
error: function (xhr, textStatus, errorThrown) {
},
success: function (returnedData) {
}
动作结果:
[HttpGet]
public virtual ActionResult Index(IFilter filter)
{
ViewModel filteredViewModel = GetFilteredViewModel(filter);
if (Request.IsAjaxRequest())
{
return toJSON(filteredViewModel );
}
return View(filteredViewModel );
}
过滤器:
public class Filter: IFilter
{
public Nullable<DateTime> LogDate { get; set; }
public Nullable<int> SpecificItem_ID { get; set; }
}
【问题讨论】:
-
这是因为
GET对发布Route Parameters(Query String)有一些限制。GET不适用于发布复杂参数。 -
能贴出toJSON方法的代码吗?
-
对不起,我不能,因为这只是 KnockoutJS 的 toJSON 函数但是我可以向您展示它正在创建的 JSON 类型:{"logDate":"01/08/2013","specificItem_ID":null "}
-
您是否尝试过只使用
data: ko.toJSON(model.filter)。我认为这可能有效。至少对于这个简单的案例,我认为应该这样做。 -
Aaraon 我刚试过,但不幸的是没有任何区别
标签: asp.net-mvc jquery http-get