Json MVC数据表复杂对象
我想替换我的MVC.GRID来使用jquerydatatable,但这并不像看上去那么容易。我在网上搜索了一些例子,但MVC的例子不多。 我发现唯一一个重点是服务器端操作,我不需要,因为我的数据不是那么大 问题: 基于这两个参数,我想获得用户列表并将其显示在datatable上Json MVC数据表复杂对象,json,asp.net-mvc,datatables,Json,Asp.net Mvc,Datatables,我想替换我的MVC.GRID来使用jquerydatatable,但这并不像看上去那么容易。我在网上搜索了一些例子,但MVC的例子不多。 我发现唯一一个重点是服务器端操作,我不需要,因为我的数据不是那么大 问题: 基于这两个参数,我想获得用户列表并将其显示在datatable上 public class User { public Address Address { get; set; } public UID UID { get; set; }
public class User
{
public Address Address { get; set; }
public UID UID { get; set; }
public String Name { get; set; }
public Prof Prof { get; set; }
}
以下是我如何从数据库中获取用户:
public ActionResult Prov(int id,int cityId)
{
var users =
Uow.Users.GetAllByIdAndCityId(id,cityId).ToList();
return Json(new
{
data = users
}, JsonRequestBehavior.AllowGet);
}
在我看来
<table id="ProvTable">
<thead>
<tr>
<th>Name</th>
<th>City Name</th>
<th>UID Code</th>
<th>Title</th>
</tr>
</thead>
</table>
我的代码不起作用,我遗漏了很多东西
我的问题是:
MVC默认使用
JavascriptSerializer
转换为不支持循环引用模型的JSON。当模型包含复杂对象的属性,并且该对象包含对模型的引用时,会发生错误,例如User
包含Prof
和的属性Prof
包含用户的属性
您所展示的模型并不表明这一点,但我假设您没有展示所有模型的所有属性
在任何情况下,当您只需要4个属性时,通过网络发送每个模型的每个属性都是没有意义的,解决这个问题(并提高性能)的简单方法是创建一个只包含您需要的内容的匿名对象
public ActionResult Prov(int id, int cityId)
{
var users = Uow.Users.GetAllByIdAndCityId(id, cityId).Select(x => new
{
Name = x.Name,
City = x.Address.City.Name,
Code = x.UID.Code,
Title = x.Prof.Title
};
return Json(users, JsonRequestBehavior.AllowGet);
}
在剧本里
success: function(data) {
$('#ProvTable').DataTable({
data: data,
columns: [
{ 'data': 'Name' },
{ 'data': 'City' },
{ 'data': 'Code' },
{ 'data': 'Title' },
]
});
}
显示UID
和Prof
的模型。消息建议UID
和/或Prof
包含类型为User
的属性(创建循环引用)我更新了我的问题,但除了错误消息之外,我转换为JSON的方式是否正确?我在视图中调用datatable的方式是否正确?我如何传递参数?在您的模型中似乎没有任何可能导致该错误的内容。但由于您只想显示4个属性,因此没有必要发送所有across的电线,所以它更好地创建一个匿名对象,只包含您需要的4个属性X,我做了,我没有任何错误。但我仍然不知道如何通过ajax传递参数谢谢,但我如何传递参数,公共ActionResult Prov(int id,int cityId)有2个参数,我的调用是$.ajax({url:'/FuelAssemblyComposition/Prov',您的意思是将id
和cityId
的值从视图传递到方法吗?如果是这样,只需将数据:{id:x,cityId:y},
添加到ajax选项中(其中x
和y
是int
,但我不知道这些值来自何处)它们来自viewBag,然后类似于数据:{id:@viewBag.id,cityId:@viewBag.cityId},
Thx很多Stephen Muecke
public ActionResult Prov(int id, int cityId)
{
var users = Uow.Users.GetAllByIdAndCityId(id, cityId).Select(x => new
{
Name = x.Name,
City = x.Address.City.Name,
Code = x.UID.Code,
Title = x.Prof.Title
};
return Json(users, JsonRequestBehavior.AllowGet);
}
success: function(data) {
$('#ProvTable').DataTable({
data: data,
columns: [
{ 'data': 'Name' },
{ 'data': 'City' },
{ 'data': 'Code' },
{ 'data': 'Title' },
]
});
}