datatable嵌套ajax,通过绑定带有嵌套对象的DataTable来减少Ajax数据足迹?

博客作者面临的问题是在使用Ajax绑定DataTable时,由于隐藏列和嵌套对象导致响应数据过大。他们试图通过转换对象列表为DataTable以减少数据,但在尝试按照嵌套对象的属性进行分组时遇到异常。解决方案可能涉及动态加载隐藏列或优化数据传输方式以减少不必要的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

似乎有很多与DataTable绑定有关的问题,但没有一个可以找到我的确切情况。通过绑定带有嵌套对象的DataTable来减少Ajax数据足迹?

我目前AJAX像这种对象的列表上结合:

public class MyObject

{

public string Name { get; set; }

public string Something1{ get; set; }

public string Something2{ get; set; }

public string Something3 { get; set; }

public MyObjectMyObject2 { get; set; }

}

public class MyObject2

{

public string Color { get; set; }

public string Something4 { get; set; }

}

[GridAction]

public ActionResult GetData()

{

var data = QueryDatabaseAndInstantiateAListOfMyObjects();

return View(new GridModel(data));

}

而且具有像这样一个观点:

()

.DataBinding(dataBinding => dataBinding.Ajax().Select("GetData", new { action = "GetData" }))

.Name("Grid1")

.Columns(columns =>

{

columns.Bound(o => o.Name).Title("Name1");

columns.Bound(o => o.MyObject2.Color).Title("Color");

columns.Bound(o => o.Something1).Hidden(true);

columns.Bound(o => o.Something2).Hidden(true);

columns.Bound(o => o.Something3).Hidden(true);

columns.Bound(o => o.MyObject.Something4).Hidden(true);

})

%>

这个伟大的工程,所有因为我能排序,分组,以及以上所有。

我的情况是我在MyObject上有很多属性,并且一些边界情况正在弹出,产生几兆字节的响应数据。原因在于许多许多隐藏的列都是情景依赖的,用户可以右键单击以显示。问题是,所有这些额外隐藏列的数据都包含在响应数据中,即使它们没有被使用。而且,由于分组,分组,显示和隐藏列的行为无论如何都会获取数据,为什么所有额外的数据都必须随它一起提供?

如果我只能返回填充可见列所需的数据,再说一些我可以使用自定义属性以某种方式标记的数据,那么这将非常有助于减少返回数据的大小。

所以我把我的对象列表转换为DataTable,然后我可以有条件地添加列+数据然后将其提供给GridModel。直到尝试按照o.MyObject2.Color这样的嵌套对象中的列进行分组时,它才运行良好。 我碰上这样的例外:

属性指定名称:MyObject2.Color不能在类型中找到:System.Data.DataRowView

我想这是有道理的,但我怎么克服呢?当我使用Object Shredder时,它将MyObject的每个属性松散地键入,如[“Name”]作为字符串,[MyObject2]作为MyObject2。但过去[“MyObject2”]的所有内容都是强类型的:(dataRow [“MyObject2”] as MyObject2).Color。这就是我的头脑。

是否有另一种方法来克服我最初发送的所有未发送的额外数据?或者,有没有DataTable位的建议?我也试着将DataTable转换为IEnumerable,没有这样的运气。序列化的Json非常空。我也尝试了将所有嵌套对象展平,比如将datarow [“MyObject2.Color”]作为字符串,但是当在JavaScript中引用这个列时,这会引发havok,所以我不得不使用下划线分隔符[“MyObject2_Color”],但这真的在UI中拧紧绑定列。必须有一种方法!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值