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

问题描述 投票:0回答:2

我有一个模型项目,其中有一些[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))
}

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

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

谢谢

kendo-ui grid deep-copy
2个回答
0
投票

不确定,我猜你正在使用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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.