ASP NET 自定义服务器控件中的事件

Events in ASP NET Custom Server Control

我想知道在我的自定义服务器控件中调用回发的两种方法有什么区别:

Page.ClientScript.GetPostBackEventReference(new PostBackOptions (this)) 

或手动

__doPostBack('MyControl1', '')

这两种解决方案中哪一种更好,为什么?

我发现作为一般经验法则,最好避免以这种方式在 JavaScript 中对 ID 进行硬编码。我还发现最好让 ASP 尽可能地为您生成内容,这样 ASP 就能得到 ASP 所期望的内容。

如果您让 ASP 为您生成 __doPostback,那么您就知道 ASP 知道您在谈论哪个控件。当您使用 ClientScript.GetPostbackEventReference 时,您将获得相关控件的正确事件目标和事件参数。即使您在标记中四处移动它或以其他方式更改其 clientID ASP 仍然知道您在说什么,因为它会生成 JavaScript.

诚然,您可以通过适当的位置 <%= MyControl1.ClientID%> 避免该特定陷阱,但我认为将其保留在后端更干净。

我试图找到一篇讨论这个的文章或博客来支持我,所以这不是严格意义上的意见,但我发现的大部分内容都是关于如何使用它的指导,而不是他们为什么你应该使用它。