2016-04-14 19 views
0

MVC 4 gönderdiğim nesneyi ayrıştırmakta sorun yaşıyor gibi görünüyor.MVC ayrıştırma IEnumerable değerler istekte

jQuery'nin ajax işlevini kullanarak, verileri POST isteğini kullanarak gönderirim. Ben İsteği nesnesi içinde aldıkları da ortaya Request.Form gibi görünür:

{Name=Test&Groups%5b0%5d%5bName%5d=GroupName1&Groups%5b0%5d%5bCount%5d=123Groups%5b1%5d%5bName%5d=GroupName2&Groups%5b1%5d%5bCount%5d=123ID=bee4c411-f06c-43c6-815f-8002df4f2779} 

//formatted for readability 
Name=Test & 
Groups[0][Name]=GroupName1 & 
Groups[0][Count]=123 & 
Groups[1][Name]=GroupName2 & 
Groups[1][Count]=123 & 
ID=bee4c411-f06c-43c6-815f-8002df4f2779 

Name ve ID değerleri gayet ayrıştırılır, ancak Gruplar dizi değil ... Ben bir IEnumerable olsun, ve doğru sayıda grup içerir ancak içindeki değerler null'dur.

Ben this ve this okudum ve

ben eksik ... ne yanlış bulmak için görünmüyor olabilir?

public class GroupsListRequest { public string Name { get; set; } public string ID { get; set; } public IEnumerable<GroupRequest> Groups { get; set; } } 

Son olarak, GroupsRequest şöyle

:

MVC Action şöyle

:

public ActionResult UpdateGroups(GroupsListRequest req) 
{ 
    [...] //handle the request 
} 

ve GroupsListRequest şöyle

public class GroupsRequest 
{ 
    public string Name { get; set; } 
    public int Count { get; set; } 
} 
+0

Görünümünüz nasıl görünüyor? Ya da o nesneyi nasıl temsil edersiniz, hangi formatı temsil etmesi gerekiyor? – CodeCaster

+1

Bağlamak için 'Gruplar [0] .Name: GroupName1 & ... ' –

+0

@Stephen olması gerekir. Bu biçim bir anlam ifade etmiyor,' key = value ',' key: value' değil. – CodeCaster

cevap

1

bu

deneyin

Talep üzerine köşeli ayracı ad ve sayma alanının çevresinden çıkarın.

Name:Test & 
Groups[0].Name:GroupName1 & 
Groups[0].Count:123 & 
Groups[1].Name:GroupName2 & 
Groups[1].Count:123 & 
ID:bee4c411-f06c-43c6-815f-8002df4f2779 

girişinizi adı @sangramparmar olarak, Yani bu

<input type="text" name="Groups[0].Name" value="George" /> 
+0

bazı metin açıklaması eklendi –

+0

doğru ... cevapsız! Teşekkürler! –

0

gibi olmalıdır ve söz @stephenmuecke, sorun dizideki nesnelerin biçimi ile oldu - onlar ekstra çevrili edildi parantez çifti.

Çeşitli koşullar düzeltmek için bu sorunlu yaptı:

  • Ben sunucuya isteği göndermek için jQuery kullanıyorum ve param işlevi yanlış (en azından bildiğim kadarıyla dizi ayrıştırma soruna neden biridir C# 'ın MVC
  • söz konusu olduğunda sunucuya Her talep öncesinde isteği göndererek bir (oturuma sabit) anahtarının verilerine eklenir olması gerekir. Bu nedense küresel ajaxSetup
  • işlemleri otomatik olarak gerçekleşir, MVC başarısız ayarladığımda ajax isteğinin verilerini okumak için contentType - application/json (en azından, beklediğim şekilde okumayı başaramadı ...hangi şimdiye kadar öğrendiğim bir şey varsa, muhtemelen kullanarak sona erdi çözüm şöyle bir dizeye veri nesnesini ayrıştırmak için kendi stringify fonksiyonunu inşa etmekti

) bir şekilde yanlış yönlendirilmiş edildi:

fazladan bir işareti de ile sonlanan,

beforeSend: function (jqXHR, settings) { 
    var userKeyString = 'userKey=' + [... fetch the user key...]; 
    if (settings.type.toUpperCase() === 'GET') { 
     settings.url = settings.url + '&' + userKeyString; 
    } else { 
     if (settings.data != undefined) { 
      settings.data = userKeyString + '&' + settings.data; 
     } 
    } 
}, 

Şimdi:

stringify: function (obj, prefix) { var objString = ''; prefix = prefix || ''; if(typeof(obj) === 'object') { if (Array.isArray(obj)) { _.each(obj, function (item, index) { objString = objString + utilityMethods.stringify(item, prefix + '%5b' + index + '%5d'); }); } else { if (prefix != undefined && prefix.length !== 0) { prefix = prefix + '.'; } _.each(_.keys(obj), function (key) { objString = objString + utilityMethods.stringify(obj[key], prefix + key); }); } } else { objString = objString + '&' + prefix + '=' + obj; } return objString; } 

Ardından küresel ajaxSetup yılında, öyle gibi, gerekli anahtarı eklemek için beforeSend eklendi her istek. Bunu eninde sonunda çözeceğim ... belki.