【问题标题】:Getting the dataItem after DataBound from ListView/DataGrid (any list) in ASP.Net从 ASP.Net 中的 ListView/DataGrid(任何列表)获取 DataBound 之后的 dataItem
【发布时间】:2009-11-19 07:40:26
【问题描述】:

我有一个列表(ListView),它显示了很多信息,我想做的是在 DataBounded 之后获取 DataItem,即在 ItemCommand 事件上。

我知道我可以只将密钥存储在 DataKey 中,但我需要存储比密钥更多的信息。

信息来自各种外部来源,我只需要保存用户点击的那些。

一些解决方案

  1. 存储密钥并从外部数据源重新获取它,但这既昂贵又缓慢
  2. 将数据存储在会话中,内存开销很大
  3. 将所有传入数据存储在 db 中,但同样不需要数据
  4. 存储在视图状态中,这将创建大量视图状态...
  5. 从视图本身获取数据,但是我没有显示我需要的所有数据,有些信息没有显示,即Id的

在我写这篇文章时,我相信除了我上面写的之外没有真正的解决方案。

谁有更好的解决方案?

【问题讨论】:

    标签: c# asp.net list


    【解决方案1】:

    您可以在列表视图模板中使用不可见的文字控件来存储额外数据。如果你有复杂的对象,你可以在里面放任何东西,比如 xml。这将利用每一行的视图状态,因此您将遇到与 #4 相同的问题,除非您将其存储在行级别的控件中,该控件将其上下文保存到视图状态,而不是自己手动管理视图状态中的数据.

    我不推荐 #5,因为依赖视图的数据将导致您必须重新验证该数据服务器端以确保没有人弄乱它。

    在某些时候您需要存储信息服务器端或客户端。如果您担心服务器端存储或检索过程缓慢作为问题,请将其存储在客户端,但要意识到这会增加您的带宽和客户端以及请求处理。

    您确实需要测试您的具体案例,看看您可以承受的负载,因为没有任何魔法可以消除这种负载。

    【讨论】:

    • 感谢您的想法凯尔西。它确实会存储在服务器端、客户端或两者都不存储,各有利弊。客户端问题是有很多数据,真的会让客户端不堪重负。服务器端将是更好的解决方案。我的最终决定是将传入的数据存储在一个临时数据库中,该数据库将负责清理和引用 DataKey 中的 ID,然后根据需要复制相关信息。
    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 2012-09-04
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    相关资源
    最近更新 更多