Lee
Lee

Reputation: 768

Returning an List<> with JsonResult

I am using jQuery to consume my action.

 $.ajax({   url: '',
            data: 'json',
            type: 'post',
            dataType: options.dataType,
            async: false,
            success: function (obj) { returnValue = obj; }
        });

now....

if I return this one...

var test1 = Json(new { Message = "Any message here.", Status="True" });

the return on my Ajax call is JUST fine..

BUT.. if i return this one(List of users from EF)

var test2 = Json(IoC.Resolve<IUserService>().GetUsers());

I will get undefined/500 (Internal Server Error).

Now the question is how to properly return a JSON from an object so that jQuery ajax can read it properly?

Thanks

Upvotes: 1

Views: 1286

Answers (2)

HaBo
HaBo

Reputation: 14287

public ActionResult MethodName(){
var returnList = IoC.Resolve<IUserService>().GetUsers().ToList();
retun JSON(returnList,JSONRequestBehaviour.AllowGet);
}

jQuery Function

success: function (obj) {
alert(obj.d.ListProperty);
// you can access all the properties you have in the list.
}

Upvotes: 0

jim tollan
jim tollan

Reputation: 22485

Lee,

Have never seen the usage:

var test2 = Json(IoC.Resolve<IUserService>().GetUsers());

before and am not going to comment. However, you MAY get away with merely adding a .ToList() to the end of the statament, i.e.:

var test2 = Json(IoC.Resolve<IUserService>().GetUsers().ToList());

The reason for the issue is due to the fact that you haven't yet enumerated the object out before attempting to populate the json object, therefore you experience all sorts of latency and object reference problems. By adding ToList() you mitigate these problems as the object is fully enumerated before it hits the Json() method.

it might just work, ... or blow right up :)

Upvotes: 1

Related Questions