ASP.NET MVC ModelBinder не работает с GET-запросами и / или jQuery AJAX?

StackOverflow https://stackoverflow.com/questions/929409

Вопрос

Кажется, у меня проблема с тем, чтобы заставить 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; }
}

Не привязывался к полям.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top