2

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

但这对我不起作用。该页面确实回发。但我RaisePostBacKEvent从不开火。我在用户控件而不是页面中执行此操作:

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

有人对如何使它工作有任何建议吗?

谢谢

4

2 回答 2

5

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

如果不是,那么这将解释为什么页面回发但没有在您的控件中调用 RaisePostBack 方法。

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

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

附带说明,如果您的控件是页面上的唯一控件,则 ASP.NET 不会创建 __doPostBack 函数,除非您为控件调用GetPostBackEventReference

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

您可以像这样调用 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)
    {

    }
} 

希望这可以帮助。

于 2011-09-23T20:15:37.613 回答
2

它应该使用用户控件实例 ID 的 UniqueID 属性(根据我自己的个人经验,我无法让它与 ClientID 一起使用)。像这样:

__doPostBack("<%= yourControlID.UniqueID %>", "arg");
于 2011-09-23T19:59:36.607 回答