如何在 Kendo UI 数据源中禁用“读取”请求缓存

Posted

技术标签:

【中文标题】如何在 Kendo UI 数据源中禁用“读取”请求缓存【英文标题】:How To Disable "Read" Request Cache In Kendo UI Data Source 【发布时间】:2013-02-05 04:10:33 【问题描述】:

我在 MVC4 应用程序中使用 ASP.NET MVC Wrapper。

除了一个特定问题之外,一切都适用于: 我为 Kendo UI Grid 定义了一个数据源,当视图加载时,读取操作按预期调用。

但是,当页面重新加载时,“读取”请求会得到 304 结果的响应。

如何通过数据源配置禁用缓存?

【问题讨论】:

【参考方案1】:

您可以将 Kendo 数据源中的“缓存”属性设置为 false,这显然(注意:我尚未对此进行测试)将强制在每次请求时重新获取请求的页面。

将缓存设置为 false 会将“_=[TIMESTAMP]”参数附加到请求中,如有必要,可以在服务器/控制器端对其进行解析以避免服务器端缓存操作。

还请注意,您可以为每个 Kendo 传输操作指定缓存行为(即,它可以在 CRUD 操作级别或整个传输操作级别)。

请看这里:http://docs.kendoui.com/api/framework/datasource#configuration-transport.read.cache-Boolean

代码:

transport: 
    read: 
        cache: false
    

【讨论】:

我打算将我的想法更改为用户 Kendo UI Grid,因为在更改网格上的页面索引时出现了一些错误。当我尝试更改页面索引时,它只是回到第 1 页。谢谢你的回答。 上面说他正在使用 MVC 包装器。使用包装器时此选项不可用。 太好了,它节省了我的时间..感谢您的出色研究 @Phil 您可以在 MVC 包装器构建后使用 javascript 更改数据源传输选项(这并不理想,但可能)【参考方案2】:

.Read(read => read.Action("Action", "Controller", new area = "Area" ).Type(HttpVerbs.Post))

【讨论】:

这是告诉您的 kendoui 网格在每次显示数据时查询数据源的正确方法。你也不必标记你的控制器动作来接受帖子。 工作就像一个魅力。我尝试了 [OutputCache(Duration = 0, NoStore = true)],我尝试刷新网格,在 Kendo 网格级别 (MVC) 关闭缓存,但是一旦我让控制器函数注释 [HttpPost],所有问题 (包括分页)得到解决。我本可以很容易地在这上面再浪费 4 天。阿里加图。【参考方案3】:

您可以尝试在加载视图的服务器端控制器操作上进行装饰

[OutputCache(Duration = 0, NoStore = true)]

属性,例如

public class OrdersController : Controller

    [httpGet]
    [OutputCache(NoStore = true, Duration = 0)]
    public ActionResult Orders(string userId)
    
        // your code
        return View(viewModel);
    

NoStore - 一个布尔值,决定是否阻止敏感信息的二次存储 Duration - 页面或用户控件被缓存的时间,以秒为单位。在页面或用户控件上设置此属性会为来自对象的 HTTP 响应建立过期策略,并将自动缓存页面或用户控件的输出。

【讨论】:

【参考方案4】:

不能通过数据源配置成为控制器。您必须将属性应用到控制器上的 Read 方法以防止缓存。

另一种方法是将 [HttpPost] 属性应用于您的控制器方法。然后将数据源配置为不使用 GET 方法,在这种情况下它将默认使用 POST 方法。

【讨论】:

我没有看到数据源包装器中读取操作的任何“缓存”相关属性 是的,这就是我的意思...您无法通过数据源配置控制缓存...通过包装器...您必须在包装器调用的读取控制器操作上指定属性. 作为一种解决方法,我将Read 重载与routeValues 一起使用,然后为不存在的属性传递一个随机值(即模拟&_=1234567890 @ZENIT 除非我有误解,否则您的随机数不会只在每次页面加载时设置吗?我使用Read.Data 和一个简单的 JS 函数对每个请求进行缓存清除。 我想通过 ASP.NET MVC Wrapper 获得这样的能力。我可以设置 READ 的“类型”,但不能设置“缓存”设置

以上是关于如何在 Kendo UI 数据源中禁用“读取”请求缓存的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI - 在读取数据源时指定参数名称

Kendo UI for Angular:Kendo UI Datepicker 禁用输入/仅文本框部分

Kendo UI Mobile 如何禁用 touchmove 绑定

如何使用 jquery 禁用 kendo ui 下拉列表?

Kendo UI TreeView动态启用/禁用dragAndDrop事件

有没有办法在 kendo ui 调度程序中禁用特定事件?