Я использую ASP.MVC 1 для возврата IEnumerable объектов (скажем, автомобилей):
public class Car : Entity<Car>
{
public virtual string Make { get; set; }
public virtual double Length { get; set; }
public virtual string Colour { get; set; }
}
как это:
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult GetRoutes()
{
IEnumerable<Car> cars = _carTask.GetCars();
return Json(cars);
}
На моей странице я хочу перебрать каждую возвращенную машину, поэтому у меня есть это:
$.post("/Home/GetCars", null,
function(cars)
{
alert("type of object returned is " + typeof cars + ", content is " + cars);
$.each(routes, function()
{
alert(this);
});
}
);
Когда я запускаю это, первое окно предупреждения говорит:
тип объекта — строка, содержимое — [{"Make":"BMW"}, {"Make":"Ford"}]
Что говорит мне, что я возвращаю строку (не должен ли я вернуть объект?), содержащую структуру Json с двумя объектами. Однако функция jquery $.each затем продолжает перебирать каждый символ в строке, поэтому я получаю 46 окон предупреждений: первое говорит «[», затем «{», затем «»», затем «M», затем «a ', затем 'к'... вы поняли.
Из того, что я прочитал, jQuery должен анализировать это как коллекцию и должен выполнять итерацию только дважды, чтобы показать мне предупреждения, по одному для каждой машины. Затем я мог бы сделать alert(car.Make) для отображения марок, но если я попытаюсь это сделать, я получу неопределенность (потому что у строки нет свойства Make).
Что я делаю не так? Спасибо за любую помощь, должна быть очевидная ошибка, но я обещаю, что сначала много погуглил и ничего не нашел! :)