Объект класса отправки Ajax и MVC в контроллер

Моя проблема:

Во-первых, у меня есть форма поиска, где пользователь вводит критерии, а запрос отправляется соответствующему действию индекса контроллера. Пользовательский ввод передается как тип модели, который я создаю только для хранения данных. Я возвращаю модель в представление, затем прямо перед визуализацией представления я получаю данные модели представления с помощью jquery, и у меня есть knockout.js / ajax, отправляющий `` данные '' в действие jsonresult, где происходит фильтрация поиска, затем я обновляю представление, использующее данные json и нокаутные привязки данных.

Мое действие jsonresult принимает строку sortByText (работает) для сортировки таблицы и ViewModel. Но когда происходит вызов ajax, мое действие jsonresult не распознает значения, переданные объектом данных.

Как правильно передать SearchFormModel в действие JSONresult?

AJAX

«self.options.formModel» содержит мои данные, отправленные действием Index; во время отладки я вижу, что у него есть данные, но они не отправляются в действие jsonresult на следующем шаге, только sortByText. Может ли ajax 'data:' распознавать только строки и int?

     $.ajax({
        type: 'POST',
        url: Url,
        data: { sortByText: selectedText, formModel: self.options.formModel },
        dataType: "json"
      })....etc

Контроллер

    [HttpGet]     
    public ActionResult Index(string sortByText, SearchFormModel formModel)
    {
        var model = new SearchViewModel();
        model.FormModel = formModel;

        return View(model);
    }

    [HttpPost]
    public JsonResult GetData(string sortByText, SearchFormModel formModel)
    {

        //return jsonData
    }

person Rayshawn    schedule 22.02.2013    source источник


Ответы (4)


Используйте ko.toJS (self.options.formModel ()) для преобразования observableArray в объект json

person NaveenKumar1410    schedule 22.02.2013

попробуйте Использование: -

$.ajax({
    type: 'POST',
    url: Url,
    data: ko.toJSON({ sortByText: selectedText, formModel: self.options.formModel }),
    dataType: "json"
  })

Во-вторых, может быть, это звучит вне контекста: -
Ваша SearchFormModel имеет

[JsonObject(MemberSerialization.OptIn)]
public class SearchFormModel 
{

    [JsonProperty("id")]
    public string Id{ get; set; }

}

Или вы можете включить sortByText в свой класс модели: -

[JsonObject(MemberSerialization.OptIn)]
public class SearchFormModel 
{

    [JsonProperty("id")]
    public string Id{ get; set; }
    [JsonProperty("sortByText ")]
    public string SortByText { get; set; }

}

и ваш AJAX будет таким: -

    $.ajax({
    type: 'POST',
    url: Url,
    data: ko.toJSON(self.options.formModel),
    dataType: "json"
  })

Надеюсь, я не ошибаюсь.

person Shubh    schedule 22.02.2013

Иногда вам нужно извлечь данные из сериализованного объекта Form. У меня есть сообщение об этом, доступное с кодом. Часть, которую вы ищете, находится примерно на полпути под названием «Проблема данных POST».

person Joel Cochran    schedule 25.02.2013

Я закончил тем, что передавал строки и целые числа, вместо этого передача объекта не сработала.

person Rayshawn    schedule 24.02.2013