【问题标题】:ASP.NET Web UI ListView won't refreshASP.NET Web UI ListView 不会刷新
【发布时间】:2010-11-29 18:22:52
【问题描述】:

所以我将 ASP.NET 与 C# 结合使用。我有一个从数据库中查询并正确显示项目的项目。

我制作了一个评论表,用户在其中输入一段文本,然后按下 AJAX 增强按钮,将评论插入到数据库中,如下表列表视图所示。

但是,当用户输入评论时,表格保持不变,不会刷新。如果我再次按发表评论,那么它将显示上一条评论,但不显示当前评论。

我尝试在“发表评论”按钮上添加以下内容:

    CommentsView.DataBind();

不走运,它不会刷新。微软的一些聪明的程序员忘记在 ListView 类中添加一个简单的“ListView.Refresh()”函数。

我不明白为什么 AJAX 不会自动更新表格来更新信息。你如何让它显示最新的数据?

【问题讨论】:

  • 用户输入评论后你更新CommentsView.DataSource了吗?
  • 您使用的是哪种 AJAX 实现?如果您使用的是 Microsoft 的 ASP.NET AJAX,您可能应该在 ListView 周围包裹一个 UpdatePanel,以便您可以通过刷新 UpdatePanel 来触发 ListView 的更新。
  • "..some smartprogram at microsoft.." 对 SO 的讽刺通常不会很好——除非你在 meta.stackoverflow.com
  • KBoek,是的,我用 UpdatePanel 包装它,但它会在每次单击按钮后更新上一条评论,而不是添加到数据库中的最新评论。
  • 别把我的讽刺当真霍根,我只是很生气 ASP.NET 中的所有东西都慢、笨重而且与解释语言相比并不简单。

标签: c# asp.net listview


【解决方案1】:

微软的那些聪明的程序员了解数据绑定如何在 apsx 页面上工作。

这涉及理解页面lifecycycle。如果您阅读了本文档并理解了它,那么您遇到的问题应该会变得清晰。

但快速的答案是:现在您绑定到页面 init 中的数据。如果要更改该数据,则必须重新绑定到数据源。否则,.NET 会在视图状态中自动为您缓存它。

在您的“发表评论”中添加一些代码以重新绑定数据源(从而更改视图状态),您应该没问题。

【讨论】:

  • 他们当然会理解,他们创造了它。我知道它在缓存中。但是,我认为 pageLoad 会再次加载并重新查询数据。我做了一个函数来重新查询数据并放入一个新的数据绑定。谢谢。
  • @Dexter :不只是在缓存中——在视图状态中。 Viewstate 与缓存非常不同,它是理解 ASP.NET 工作原理的关键。阅读这篇文章以获得美好时光:msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic3
  • 不确定我是否完全理解,视图状态与缓存不一样吗?为什么它们会有所不同?
  • hmmm... viewstate 更像是一个在服务器和浏览器之间来回传递以保存状态的变量。缓存是检索的内容的存储版本,而不是原始版本。
【解决方案2】:

简单地做

listView.DataBind()

更新列表视图。

【讨论】:

  • 我还必须将列表视图包装在 UpdatePanel 中,可能是因为 DataBind() 是通过来自用户控件中 UpdatePanel 内的控件的事件触发的。
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 2013-10-08
  • 2022-07-06
相关资源
最近更新 更多