Problemy z pobieraniem ASP.NET MVC3 w celu powiązania mojego złożonego obiektu JSON zawierającego listę.MVC3 Complex JSON List Binding
Oto struktura, którą mam dla moich obiektów.
public class PageModel
{
public PageModel() { }
public CustomObject1 CustomObject { get; set; }
public IEnumerable<CustomObject2> Objects { get; set; }
}
public class CustomObject1
{
public CustomObject1() { }
[Required]
public int CustomId1 { get; set; }
public string CustomName { get; set; }
}
public class CustomObject2
{
public CustomObject2() { }
[Required]
public int Custom2Id { get; set; }
public CustomObject3 SubItem { get; set; }
public int SubItemId { get; set; }
}
Można zakładać CustomObject3
ma podobną strukturę - nie ma potrzeby powielać kolejną utworzoną klasę, więc postać można użyć wyobraźni :)
Oto kod JavaScript/jQuery sprawia, że wywołanie POST (zakładamy cały JS prowadzące do tego zapewnia prawidłowe dane):
//$obj1 has all data for the first object
var firstObj = { };
firstObj.CustomId1 = $obj1.Id;
firstObj.CustomName = $obj1.Name;
var i = 0;
//$objects is an array with all the data
$.each($objects, function() {
objsArray[i] = {
Custom2Id: $(this).Id,
SubItemId: $(this).itemId
};
++i;
});
$.ajax({
type: 'POST',
url: '/Action/Method',
data: { CustomObject: firstObj, Objects: objsArray },
//Success/error handlers here
});
i wreszcie (wiem, sporo code) oto przegląd sposobu mam:
public class ActionController : Controller {
public JsonResult Method(PageModel model) {
//Gets here - model.CustomObject is filled correctly, and model.Objects has a correct count of whatever data I passed to the method - but all of the properties are empty!
}
}
Tak jak powiedziałem, pierwszy obiekt jest wypełniony i wszystkie dane są tam, kiedy debuguję i przechodzę. Jeśli przekażę dwa obiekty w tablicy Objects
w obiekcie JSON, widzę w sterowniku Count
, ale Custom2Id
i SubItemId
są puste. Co daje?
Kiedy określam contentType
z w moim zgłoszeniu $.ajax
, MVC skarży się na przekazane dane. Spróbowałem również podzielić parametr model
w metodzie MVC na dwa oddzielne parametry, ale to nie pomaga.
Każda pomoc jest bardzo doceniana - ta osoba mnie zaskoczyła!
to bardzo pomogło :)! – Rookian
Po godzinach szukania w pełni funkcjonalnego kodu rozwiązało to mój problem! Dzięki!! –