ExtJS: как возвратить json успех w/данные с помощью asp.net mvc

Попробуйте colorForth.

6
задан Robert Harvey 26 September 2009 в 21:02
поделиться

3 ответа

Попробуйте это ...

public JsonResult Index()
{
    var json = new
    {
        success = true,
        data = from user in repository.FindAllUsers().AsQueryable()
               select new
               {
                   id = user.Id,
                   name = user.Name,
                   ...
               }
    };
    return Json(json);
}
12
ответ дан 9 December 2019 в 20:46
поделиться

Я использовал Newtonsoft.Json вместе с некоторым кодом от Rick Strahl, который помогает сериализовать объекты данных. его оригинальный пост здесь: http://www.west-wind.com/Weblog/posts/471835.aspx

    public class ExtJSJsonResult : JsonResult
    {
        public bool success { get; set; }
        public string msg { get; set; }

        public override void ExecuteResult(ControllerContext context)
        {
            if (context == null){
                throw new ArgumentNullException("context");}

            HttpResponseBase response = context.HttpContext.Response;

            if (!String.IsNullOrEmpty(ContentType))
            {
                response.ContentType = ContentType;
            }
            else
            {
                response.ContentType = "application/json";
            }
            if (ContentEncoding != null)
            {
                response.ContentEncoding = ContentEncoding;
            }
            if (Data != null)
            {
                Type type = Data.GetType();
                response.Write(String.Format("{{success: true, msg: \"{0}\", data:", msg));
                if (type == typeof(DataRow))
                    response.Write(JSonHelper.Serialize(Data, true));
                else if (type == typeof(DataTable))
                    response.Write(JSonHelper.Serialize(Data, true));
                else if (type == typeof(DataSet))
                    response.Write(JSonHelper.Serialize(Data, true));
                else
                {
                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                    response.Write(serializer.Serialize(Data));
                }
                response.Write("}");
            }
        }
    }

используя его

public ExtJSJsonResult View(int id)
{
    bool success;
    string msg;
    DataRow dr=null;
    try
    {
        dr = DBService.GetRowById("oc.personeller", id);
        success = true;
        msg = "all ok";
    }
    catch (Exception ex)
    {
        success = false;
        msg = ex.Message;
    }

    return new ExtJSJsonResult
    {
        success= success,
        msg = msg,
        Data = dr
    };

}

Я надеюсь, что это будет полезно для кого-то, кроме меня.

0
ответ дан 9 December 2019 в 20:46
поделиться

Я использовал ответ @ Веллингтона с VS2010 (бета2) и MVC 2 (бета) и получил следующую ошибку:

Метод 'System.String ToString (System.String)' не поддерживает преобразование в SQL.

Что, я думаю, является проблемой сериализации (?)

Вот что я изменил, чтобы он работал ..

public JsonResult Index()
{
    var json = new
    {
        success = true,
        data = from user in repository.Users
               select new JsonUser(user)
    };
    return Json(json);
}

JsonUser - простой сериализуемый объект - я получил эту идею из подкаста @ Скотта Хансельмана

Вот пример JsonUser :

public class JsonUser
{
    public long id { get; set; }
    public string name { get; set; }
    public string dateJoined { get; set; }
    ...

    public JsonUser(User user)
    {
        id = user.ID;
        name = user.Name;
        dateJoined = user.DateJoined.ToString("yyyy-MM-dd");
        ...
    }
}
0
ответ дан 9 December 2019 в 20:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: