我有一个ASP.NET控件,它有一个在元素上内联呈现的onclick事件处理程序。我想调用该函数并使其升级目标控件的服务器端事件处理程序。
<asp:CheckBox ID="Foo"
runat="server"
AutoPostBack="true"
Text="Foo" />
<a href="#"
onclick="javascript:setTimeout('__doPostBack(\'Foo\',\'\')', 0)">Test
</a>
我创建了复选框,查看了字段上的渲染函数,然后将其复制到锚元素的onclick上。
锚点将引发回发,但不会引发复选框的事件处理程序。
protected override void OnLoad(EventArgs e)
{
// fires for checkbox
// fires for anchor (the anchor does cause a postback)
}
void Foo_CheckedChanged(object sender, EventArgs e)
{
// fires for checkbox
// does not fire for anchor
}
protected override void OnInit(EventArgs e)
{
this.Foo.CheckedChanged += new EventHandler(Foo_CheckedChanged);
}
是否可以这样做?
答案 0 :(得分:2)
不要尝试手动确定回发的javascript应该是什么样子。为任务使用适当的API ...在这种情况下,这正是GetPostBackEventReference的用途。
myControl.Attributes.Add("onclick", "javascript:" + ClientScript.GetPostBackEventReference(targetControl));
答案 1 :(得分:0)
为什么不将标签转换为asp:linkbutton,然后为两个
分配一个处理程序protected override void OnInit(EventArgs e)
{
this.Foo.CheckedChanged += new EventHandler(Foo_CheckedChanged);
this.Bar.Click+= new EventHandler(Foo_CheckedChanged);
}
答案 2 :(得分:0)
您的客户端ID复选框现在可能是“Foo”。
使用以下内容确保为元素使用正确的ClientID
<a href="#"
onclick="javascript:setTimeout('__doPostBack(\'<%= Foo.ClientID %> \',\'\')', 0)">Test
</a>