помогите с использованием метода jquery .ajax () для передачи агрегированных данных в действие mvc2 - PullRequest
0 голосов
/ 28 сентября 2010

Я пытаюсь использовать функцию jquery ajax для отправки в действие контроллера MVC2, но мои параметры включают в себя массив (простого) пользовательского класса, и действие не получает данные правильно.

Клиент:

var element1 = { FirstName: 'Raymond', LastName: 'Burr' };
var element2 = { FirstName: 'Johnny', LastName: 'Five' };
var var2 = [element1, element2]; 
var var1 = 'some string';    
var parms = {
  var1: var1,
  var2: var2
};
var ajaxArgs = {
    type: "POST",
    traditional: true,
    url: "/Home/Test1",
    data: parms,
    dataType: "json",
    success: returnSuccess,
    error: returnError
};

$.ajax(ajaxArgs);

Сервер:

[HttpPost]                                                                   
public ActionResult Test1(string var1, List<TestParameterClass> var2) { ... }

public class TestParameterClass              
{                                        
  public string FirstName { get; set; }
  public string LastName { get; set; } 
}

2 случая, которые уже работают: 1) Использование List <_string> в качестве параметра действия и изменение массива javascript на строку массив.
2) Использование TestParameterClass в качестве параметра действия и передача 1 экземпляра пользовательского класса.

Таким образом, реальный трюк, по-видимому, заключается в получении массива пользовательского класса, успешно переданного и с другими плоскими (строковыми) параметрами.

Есть идеи, как сделать эту работу? Также есть ли документация о том, как MVC2 переводит параметр в некоторый тип C # (я использовал List <> только b / c, он кажется наиболее широко используемым)?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 сентября 2010

Я бы попытался выяснить, является ли вызов AJAX неправильным или неправильная привязка входной модели на сервере.Используйте Firebug или Fiddler для проверки вызова AJAX и, в частности, данных POST.если это выглядит правильно, то проблема, скорее всего, связана с привязкой модели.

проверьте этот пост для некоторой "документации" анализа списка:создайте образец страницы с формой, которая имитирует те данные, которые вы передаете через AJAX.если вы можете получить форму для POST и связать модель правильно, скорее всего, ваш AJAX-вызов также будет работать.

0 голосов
/ 28 сентября 2010

Ах, Модель Binder .Источник такого большого количества магии и причина такого большого горя, когда дело доходит до .NET MVC.Модель Binder - это то, что превращает параметры в объекты, и иногда это немного придирчиво к тому, что вы передаете.

В данном конкретном случае, я думаю, вам нужно передать параметры в форме

* 1006.*

По сути, если вы передаете связывателю модели тип коллекции, он хочет, чтобы параметры именовались с помощью индексов в стиле массива (скобка-номер), а затем имени свойства.По крайней мере, это то, что сработало для меня;Я не ниндзя MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...