ASP.NET MVC ModelBinder не работает с GET-запросами и / или jQuery AJAX?
-
06-09-2019 - |
Вопрос
Кажется, у меня проблема с тем, чтобы заставить MVC заполнять параметр моей пользовательской модели при вызове через GET вместо POST.
У меня есть фрагмент JavaScript, который вызывает действие, подобное этому:
$.getJSON('<%= Url.Action("DoSearch") %>' + location.search,
function(data) {
if (data.Result == "OK") {
location.href = location.href;
}
});
Что он делает, так это в основном вызывает отдельное действие, передавая ему те же строки запроса, что и вызывающая страница.Затем, если результат "ОК", он обновляет текущую страницу.
Действие определяется следующим образом:
public ActionResult DoSearch(SearchParameters searchParameters)
Модель представляет собой:
public class SearchParameters
{
public string Query;
...
}
URL-адрес вызова (проверенный с помощью firebug) выглядит следующим образом /DoSearch?Query=some+query
.(тоже пробовал /DoSearch?searchParameters.Query=some+query
безуспешно)
Независимо от того, что я пробовал, мой параметр всегда отображается как пустой (не null, просто все параметры инициализируются по их значениям по умолчанию).
Если вместо этого я определю действие следующим образом:
public ActionResult DoSearch(string Query, ...)
Тогда мои параметры будут заполнены правильно.Однако не в отношении модели.
Я предполагаю:
a) либо заполнение объектной модели не работает для запросов GET.
б) Я делаю что-то не так
Есть какие-нибудь идеи?Спасибо.
Решение
Вам нужны общедоступные свойства для привязки к классу.
заменить
public string Query;
с
public string Query{get;set;}
По крайней мере, это то, что я должен был сделать, чтобы заставить это работать в моем проекте..Я не знаю, есть ли у вас еще одна проблема.О, и я тоже использовал GET, так что это должно сработать.
Это мой класс параметров:
public class Parameters
{
public int? page { get; set; }
public int? pageSize { get; set; }
public string[] columnsToDisplay { get; set; }
public string columnToSort { get; set; }
public bool? descending { get; set; }
}
Не привязывался к полям.