在Kendo网格中,如何避免将深拷贝数据发送到客户端?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Kendo网格中,如何避免将深拷贝数据发送到客户端?相关的知识,希望对你有一定的参考价值。

我有一个模型项目,其中有一些[Foreignkey]属性,如订单,用户......这样可以方便地在其他地方获取更多信息。例如,我可以使用project.users.username轻松获取用户名。

现在有疑问:

当我使用Telerik Kendo网格列出项目内容时使用

.Read(read=>read.Action("GetProjectData", "Project", new {projID = Model.projID}))

服务器端的功能如下:

public ActionResult GetProjectData([DataSourceRequest]DataSourceRequest request, long projID)
{
    var p = db.project.where(c=>c.projectID == projID);
    return Json(p.ToDataSourceResult(request))
}

网页很好。它列出了我想要的所有内容。但是当我调试从服务器发送的数据时,我发现服务器发送了大量额外数据,包括项目数据的深层副本。所有用户信息都在响应包中。我在用户模型中有一些外键,那些类数据也在那里。数据巨大。

为安全性和效率原因,有没有办法让服务器只发送第一层数据?我创建了一个新类,只是从项目中复制了所需的数据并发送给客户端。有什么简单的方法吗?

谢谢

答案

不确定,我猜你正在使用Telerik FluentModel来访问你的数据。也许你可以使用这样的东西,或者这可以帮助你:

Telerik.OpenAccess.FetchOptimization.FetchStrategy fetchStrategy = new Telerik.OpenAccess.FetchOptimization.FetchStrategy();
db.FetchStrategy = fetchStrategy;

var detachedCopy = db.CreateDetachedCopy<List<project>>(p.ToList(), fetchStrategy);

这应该为您提供没有外部属性的初始列表。这个链接也可以帮到你:http://docs.telerik.com/data-access/developers-guide/crud-operations/defining-fetch-plans/getting-started-root-getting-started-with-fetchplans

另一答案

你试过ScriptIgnoreAttribute吗?这可能完全符合您的要求。有关文档,请参阅https://docs.microsoft.com/en-us/dotnet/api/system.web.script.serialization.scriptignoreattribute

以上是关于在Kendo网格中,如何避免将深拷贝数据发送到客户端?的主要内容,如果未能解决你的问题,请参考以下文章

Kendo网格服务器端分组

如何使用 Kendo Grid 客户端模板将选定的单选按钮值发送到控制器?

如何从 Kendo 网格中的 ClientTemplate 调用 javascript 方法?

Kendo Grid 如何更新、创建、删除数据源

即使没有更新数据,如何强制 Kendo 网格更新

kendo 数据源中的 'options' 参数