2

我正在为网站开发一个评论系统,并且在每个回发页面上为数据库中与该页面相关的每条评论生成一个用户控件(称为 ucComment)。每个 ucComment 都有一个响应按钮,允许您响应每个单独的评论。

当我终于意识到每次创建新评论时,下一次回发都会抵消所有页面的控件 ID,但我遇到了响应按钮不执行任何操作的问题。换句话说,当我单击 ctl00_Content_ctl00_ctl01_ctl0 7 _lbtnRespond 时,该控件实际上将在下一次回发时生成为 ctl00_Content_ctl00_ctl01_ctl0 8 _lbtnRespond。所以与 ctl07 相关的事件根本不会发生。

在网上闲逛时,我读到了关于覆盖 ClientID 的信息。我想如果我能以我想要的方式命名控件,我就可以绕过我的问题。 http://west-wind.com/Weblog/posts/4605.aspx 它看起来像一个很棒的 hack,但它不会触发事件,因为页面上生成的 ID 与控件中的 ID 表示方式之间存在差异树。

甚至还有一个人从 MasterPage 派生来改变控制树的工作方式,以使上述 hack 用于回发:http: //www.netquarry.com/index.php/2009/03/master-pages-ajax -and-javascript-10292/ 但我担心可能会产生不可估量的影响。

我应该怎么做才能让我的评论系统正常工作,以便我可以响应特定评论并让响应事件仍然触发,即使控件在该回发上被重命名?

4

2 回答 2

2

我是 NetQuarry 开发 MasterPage 派生类的人。

不知道你的问题有没有解决。我当然可以理解您对我的 MasterPage 方法的担忧。我担心它也可能很脆弱。但是,它现在已经在我们平台上构建的大约六种不同的 Web 应用程序上运行了大约一年半。也就是说,由于它们都建立在我们的平台上,它们确实有一定的相似之处。当我们从 .Net 2.0 迁移到 .Net 3.5 时,代码也继续正常工作。

然而,最近,我们确实发现该方法不适用于 UpdatePanels,并且无法纠正这种情况。在研究这个问题时,我发现 .Net 4.0 提供了比 .Net 3.5 更好的对 ClientID 的控制,我怀疑使用 3.5 修复这种事情会非常简单。这是 Scott Guthrie 的一篇很好的文章:

http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net- 4-0-series.aspx

编辑:我突然想到,在这种情况下,您的问题可能会通过简单地根据相关评论记录的主键呈现具有唯一 ID 的每个评论响应按钮来解决。这样,在回发时,每个现有按钮的 ID 永远不会改变。

希望这会有所帮助。

凸轮

于 2010-10-01T18:54:47.927 回答
0

您是否有机会发布用于生成用户控件的服务器端代码?以及托管它们的 aspx 页面?

于 2010-08-17T21:37:11.527 回答