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

Кажется, у меня проблема с получением 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 безуспешно)

Независимо от того, что я пробовал, мой параметр всегда отображается как пустой (не ноль, просто все параметры инициализируются до значений по умолчанию)

Если вместо этого я определю действие следующим образом:

    public ActionResult DoSearch(string Query, ...)

Тогда мои параметры заполняются правильно. Однако не с моделью.

Я предполагаю:

a) заполнение объектной модели не работает для запросов GET.

б) я что-то делаю не так

Есть идеи? Спасибо.

1 Ответ

6 голосов
/ 30 мая 2009

Вам нужны публичные свойства для привязки к классу.

заменить

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; }
}

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

...