【问题标题】:Gridview and viewed itemsGridview 和查看的项目
【发布时间】:2009-06-05 20:36:21
【问题描述】:

我有一个 gridview (DXperience gridview),如果用户已经点击了该行中的链接,我想在其中显示。每行上的链接将用户带到一个页面,该页面显示有关该项目的更多详细信息。为了象征这一点,我想到了例如使访问行的背景颜色不同。

我的问题是最简单和最有效的方法是什么?

我的想法: 由于没有登录系统,我曾考虑将项目的 ID 保存在以逗号分隔的 cookie 中,并且在呈现行时,我将查看 cookie 以查看该项目是否已被查看。

我担心这会使 gridview 变慢。我通常显示几千行,如果用户单击了大约 40 个项目,则需要一段时间才能在每行上运行 40 个项目,以检查它是否已被查看。这是一个有效的问题吗?如果是,我该如何优化它?

【问题讨论】:

    标签: gridview dxperience


    【解决方案1】:

    有几种方法可以做到这一点。使用 cookie 是一种有效的方式,尽管它可能不允许干净地使用 :visited。

    此人在绑定时更改了地址,因此它与唯一 ID 匹配。 link IE7 着色有问题;我怀疑这是因为他们必须使用锚 (#)。

    更新

    根据您的情况,您可以尝试将行 ID 列表传递给文字:

    var visitedSites = <asp:Literal />;
    

    传入一个 JS 数组,您可以循环遍历它并以这种方式设置行颜色。这并不是特别高的开销,至少在您访问了几百个链接之前不会。

    您也可以在服务器端执行此操作,在行绑定期间。根据服务器负载与客户端负载,这可能是更好的选择。

    function gridLinks_OnRowDataBound (...) {
        if (visited.Contains(e.Row.DataItem["field"]))
        //Set color
    }
    

    (我正在记忆中工作,并没有在工作中使用 C#,但你明白了。)

    【讨论】:

    • 我的行包含多列,我想制作整个行的背景,而不仅仅是链接到项目的那一列,如果被访问,则为不同的颜色。
    • 您可以做的一件事是遍历行,并通过链接颜色设置行颜色。但是很有可能读取访问过的颜色并不总是有效,因为这是一个安全漏洞 (azarask.in/blog/post/socialhistoryjs)
    • 我会在访问的行上使用 JS 数据填充隐藏字段。从架构上讲,这是一个更简单的选择。
    猜你喜欢
    • 1970-01-01
    • 2020-08-05
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多