ASP.NET MVC Ajax: передача IList из представления в контроллер - PullRequest
0 голосов
/ 17 мая 2010

Мне нужно передать строки сетки из представления в контроллер, используя POST. Идея состоит в том, чтобы передать список объектов (людей), имеющих следующую структуру:

  • Строковое имя
  • Строковый адрес
  • Строка ID

Я хочу прочитать данные из JQGrid и передать их контроллеру для заполнения IList.

Я пытаюсь создать объект данных для прохождения через параметр данных Ajax.

Вот код Javascript:

$("#saveButton").click(
 function()
 {
   var returnData = '{';
   var existingIDs = $('#listPeople').getDataIDs();

   if (idsPeople.length > 0)
   {
     for (i=0;i<idsPeople.length;i++) 
     {

//Trying to build the obejct data

ret = ret + '"people['+ i +'].Name":' $('#listPeople').getRowData(idsPeople[i]).Name + ',';

ret = ret + '"people['+ i +'].Address":' $('#listPeople').getRowData(idsPeople[i]).Address+ ',';

ret = ret + '"people['+ i +'].Id":' $('#listPeople').getRowData(idsPeople[i]).Id+ ',';

//If it has more than one element
      if (idsPeople.length>1 && (i+1)<idsPeople.length)
      {
        ret = ret + ',';
      }
    }
  }

ret = ret + '}';

Моя функция Ajax для отправки:

var url_all = '<%=Url.Action("SaveData") %>;

$.ajax({
type: "POST",
url: url_all,
data: ret,
dataType: "json",
success: function(){
   alert("OK");
 },
error: function(){
   alert("Error: check SaveData");
 } 
});

Мой контроллер:

public ActionResult SaveData(IList<PeopleHeader> people){

   // using debug to know if "people" variable has any values

   return Json(true);
}

Проблема, которую я получаю, заключается в ошибке: «System.NotSupportedException: фиксированный размер коллекции», и данные не доставляются.

Я думаю, что моя проблема заключается в создании объекта ... Есть ли более простой способ сделать эту процедуру?

Заранее спасибо,

1 Ответ

1 голос
/ 18 мая 2010

Проблема в том, что вы публикуете данные в кодировке JSON в методе действия, но методы действия принимают только данные, закодированные в форме (aka contentType: application / www-x-form-urlencoded).

Я думаю, если вы просто удалите строку:

dataType: "json"

Это должно работать. Или, если вы действительно хотите опубликовать JSON, вы можете попробовать JsonValueProvider.

http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

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