我正在尝试将ExtJS与Asp.Net MVC一起使用,到目前为止一切正常。 (对ExtJS的好工作) 为了简化操作,我需要一些帮助将数据从.net返回到ExtJS。
ExtJS希望在JSON Respone中看到成功标志以及其他数据。
样本预期响应格式类似于
{success:true,data:{id:3,text:“hello world}}
所以,使用linq2sql或ado.net数据集作为模型对象,您是否知道如何轻松以此格式返回数据。
像
这样的东西public JsonResult Index()
{
result.success= true;
result.obj = repository.FindAllUsers();
return Json(result)
}
顺便说一下会有用吗?如果我有一个具有bool成功和对象数据属性的ExtJSResult类?
提前致谢
答案 0 :(得分:12)
试试这个...
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);
}
答案 1 :(得分:0)
我使用的是Newtonsoft.Json以及Rick Strahl的一些代码,它们有助于序列化Data对象。 他原来的帖子是: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
};
}
我希望这对我以外的人有用。
答案 2 :(得分:0)
我将@ Wellington的answer与VS2010(beta2)和MVC 2(beta)一起使用,并出现以下错误:
我认为,这是一个序列化问题(?)
这是我改变它以使其工作的原因..
public JsonResult Index()
{
var json = new
{
success = true,
data = from user in repository.Users
select new JsonUser(user)
};
return Json(json);
}
JsonUser
是一个简单的,可序列化的对象 - 我从@ podcast的Scott Hanselman得到了这个想法
以下是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");
...
}
}