在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 Grid 客户端模板将选定的单选按钮值发送到控制器?