试图从jscript __dopostback,RaisePostBackEvent没有开火

时间:2011-09-23 19:50:13

标签: javascript asp.net dopostback

我正在尝试按照此处的建议:Call ASP.NET function from JavaScript?

但它不适合我。该页面确实回发了。但我的RaisePostBacKEvent从未发射过。我在用户控件而不是页面中执行此操作:

public partial class MyTreatment : System.Web.UI.UserControl, IPostBackEventHandler

任何人都对如何使这项工作有任何建议?

由于

2 个答案:

答案 0 :(得分:5)

您是否指定了控件的ClientID,而不是页面的ClientID(如您引用的其他SO问题中的示例所示)?

如果没有那么这就解释了为什么页面回发但没有在你的控件中调用RaisePostBack方法。

要引用控件的ClientID,请调用__doPostBack函数,如下所示:

__doPostBack("<%= yourControlID.ClientID %>", "an argument");

作为旁注,如果您的控件是页面上唯一的控件,那么除非您为控件调用GetPostBackEventReference,否则ASP.NET不会创建__doPostBack函数。

您不一定需要使用引用,但需要调用该方法,以便页面知道生成客户端函数。

您可以像这样调用GetPostBackEventReference:

public class MyTreatment : UserControl, IPostBackEventHandler
{
    protected override void OnLoad(EventArgs e)
    {
        string postBackEventReference = Page.ClientScript.GetPostBackEventReference(this, string.Empty);

        base.OnLoad(e);
    }

    public void RaisePostBackEvent(string eventArgument)
    {

    }
} 

希望这有帮助。

答案 1 :(得分:2)

它应该使用用户控件实例ID的UniqueID属性(我无法使用ClientID,在我自己的个人经历中)。像这样:

__doPostBack("<%= yourControlID.UniqueID %>", "arg");