Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json MVC数据表复杂对象_Json_Asp.net Mvc_Datatables - Fatal编程技术网

Json MVC数据表复杂对象

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; }

我想替换我的MVC.GRID来使用jquerydatatable,但这并不像看上去那么容易。我在网上搜索了一些例子,但MVC的例子不多。 我发现唯一一个重点是服务器端操作,我不需要,因为我的数据不是那么大

问题:

基于这两个参数,我想获得用户列表并将其显示在datatable上

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>
我的代码不起作用,我遗漏了很多东西 我的问题是:

  • 如何传递参数?(在ViewBag中存储有
  • 如何访问nasted对象
  • 我将列表转换为json的方式正确吗
  • 我错过了什么使它工作
  • PS:我得到了以下错误:当我调用returnJSON时

    序列化“System.Data.Entity.DynamicProxies.Address_303E2DDFF080BE1CCF72F05B5DEE54E141232835E91070AA59A7AC0D8E5DD3”类型的对象时检测到循环引用


    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' },
            ]
        });
    }