2010-05-17 4 views
0

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

  • Строка Имя
  • Строка Адрес
  • Строка 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

Проблемы Вы отправляете JSON закодированных данные методы действия, но методы действия только принимают форму кодированных данных (ака CONTENTTYPE: приложение/WWW-х-форм-urlencoded).

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

DATATYPE: "" JSON

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

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