我有一个自定义控件 (ascx),它实现了 IPostBackEventHandler 接口,用于拦截由自定义呈现的 HTML 链接触发的自定义事件。
在此控件中,我使用更新面板,在更新面板中,我使用文本控件,在其中呈现自定义 HTML 链接。
当我在文字控件中呈现 HTML 链接时,我使用带有以下代码的 StringBuilder:
sb.AppendFormat ("<a href=\"{0}\" id=\"custom_iterator_id\">Text</a>",
this.Page.ClientScript.GetPostBackClientHyperlink(this, custom_string_param));
超链接可以很好地呈现,当点击它们时会触发异步回发并触发部分更新(因为所有链接都在更新面板中呈现)。
问题是我需要在触发使用上述代码呈现的 __doPostBack 之前执行一些自定义 Javascript。所以这里是修改后的代码的简化版本:
sb.AppendFormat ("<a href=\"javascript:JSFunc{0}\" id=\"custom_iterator_id\">Text</a>",
custom_string_param);
同样在 ascx 标记中,我使用以下代码(在更新面板内部或外部):
<script language="javascript" type="text/javascript">
function JSFunc(param) {
// custom js code here ....
__doPostBack('<%=this.ClientID%>', param);
}
</script>
这里的问题是,当单击链接时,它会执行完整的回发,而不是部分回发。我还测试了上述代码的更简单版本,似乎如果您从 href 中删除 __doPostBack 或从链接(标签)中删除 onclick 事件并将其移动到自定义 js 函数,然后您将其提供给链接,a触发完整的回发。
请注意,页面上没有错误,并且在这两种情况下代码都可以正常工作。页面根据从 __doPostBack 返回的参数正确呈现,但在第二种情况下,触发的是完整而不是部分回发。
有任何想法吗?
提前致谢,
乔治