У меня возникла проблема с использованием JQuery AJAX в качестве запроса GET. По какой-то причине связующее устройство ASP.NET MVC, похоже, не может привязываться к элементу фильтра. То, что происходит, вызывается результат действия, но создается пустой объект.привязка модели ASP.NET MVC не работает с AJAX GET, но работает с Post
Однако, если я перехожу из HTTP Get to 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) {
}
ActionResult:
[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? – ataravati
Извините, я не могу, так как это просто функция KnockoutJS toJSON Однако я могу показать вам тип создаваемого JSON: {"logDate": "01/08/2013", "specificItem_ID": null "} –