ASP.NET调用另一个元素的DoPostBack函数

时间:2010-04-16 20:42:39

标签: asp.net javascript

我有一个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);
}

是否可以这样做?

3 个答案:

答案 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>