如何在 INamingContainer 中使用 ClientScript.getpostbackclienthyperlink
How to use ClientScript.getpostbackclienthyperlink inside INamingContainer
我有一个自定义 WebControl class,它继承自 WebControl 和 INamingContainer。在这个 class 里面是一个 gridview,我希望它有可点击的行。
我暂时将 gridviews AutoGenerateSelectButton
设置为 True
,但最终我想将其替换为回发到服务器的行 onclick 事件。
在 gridviews RowCreated
事件中,我有以下代码将我想要的 onclick 事件添加到每一行:
e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(this.gvUserList, "Select$" + e.Row.RowIndex);
不幸的是,由于我的 class 从 INamingContainer 继承,这不起作用并生成与 select 按钮略有不同的输出。
select 按钮(有效)生成的输出是:
onclick="__doPostBack('UserData$gvUserList','Select');"
而从 ClientScript.GetPostBackClientHyperlink 方法生成的代码是这样的:
onclick="__doPostBack('gvUserList','Select');"
请注意,select 按钮的 javascript 在 gridviews 名称前加上 'UserData$'(页面本身提供给我的控件的 ID),因为 INamingContainer
界面,而回发客户端超链接没有。
如何使用 GetPostBackClientHyperlink 方法实现与 select 按钮相同的生成输出?
由于我还没有想出一个优雅的解决方案,我已经使用以下代码修复了它:
e.Row.Attributes["onclick"] = "__doPostBack('" + this.UniqueID + "$" + gvUserList.ID + "', 'Select$" + e.Row.RowIndex + "')";
这是我能想到的最好的。我仍然欢迎其他答案!
我有一个自定义 WebControl class,它继承自 WebControl 和 INamingContainer。在这个 class 里面是一个 gridview,我希望它有可点击的行。
我暂时将 gridviews AutoGenerateSelectButton
设置为 True
,但最终我想将其替换为回发到服务器的行 onclick 事件。
在 gridviews RowCreated
事件中,我有以下代码将我想要的 onclick 事件添加到每一行:
e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(this.gvUserList, "Select$" + e.Row.RowIndex);
不幸的是,由于我的 class 从 INamingContainer 继承,这不起作用并生成与 select 按钮略有不同的输出。
select 按钮(有效)生成的输出是:
onclick="__doPostBack('UserData$gvUserList','Select');"
而从 ClientScript.GetPostBackClientHyperlink 方法生成的代码是这样的:
onclick="__doPostBack('gvUserList','Select');"
请注意,select 按钮的 javascript 在 gridviews 名称前加上 'UserData$'(页面本身提供给我的控件的 ID),因为 INamingContainer
界面,而回发客户端超链接没有。
如何使用 GetPostBackClientHyperlink 方法实现与 select 按钮相同的生成输出?
由于我还没有想出一个优雅的解决方案,我已经使用以下代码修复了它:
e.Row.Attributes["onclick"] = "__doPostBack('" + this.UniqueID + "$" + gvUserList.ID + "', 'Select$" + e.Row.RowIndex + "')";
这是我能想到的最好的。我仍然欢迎其他答案!