2011-09-23 100 views
2

我试图按照这里的建议从JScript中到__doPostBack:Call ASP.NET function from JavaScript?努力,RaisePostBackEvent不点火

但它不是为我工作。该页面确实回传。但我的RaisePostBacKEvent永远不会燃烧。我在一个用户控件,而不是一个页面这样做:

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

人对如何得到这个工作有什么建议?

感谢

+0

must..show..code –

+0

向我们展示您的通话__doPostBack ... –

回答

5

你指定控件的客户端ID,而不是网页的客户端ID(如示例从另一个SO问题,你引用的)?

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

要引用您控制的客户端ID,调用__doPostBack函数像这样:

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

作为一个侧面说明,如果你的控制页面,则__doPostBack功能不会被创建的唯一控制ASP.NET,除非您为您的控件拨打电话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) 
    { 

    } 
} 

希望这有助于。

+0

我发现了另一种使用OnClientClick =“return myJSFunction();”的方法但我会将你的答复标记为答案,即使我不确定这是否是我遇到的问题。谢谢 – merk

2

应该使用用户控件实例ID的UniqueID属性(我不能让这个与客户端ID的工作,在我自己的亲身经历)工作。像这样:

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

我已经经历了同样的事情迁移到.NET 4.0后 - 最终我发现,RaisePostBackEvent从未解雇(控制工具IPostBackEventHandler接口)由于控制ID错误 - 在控制创建Render中的某处,我添加了__doPostBack,并且在调试时ID似乎是“ctlContainer_grdDataGrd”,但在页面上却是“ctlContainer $ grdDataGrd”。将代码ClientID更改为生成的JavaScript的UniqueID(用于__doPostBack函数参数)后,所有工作都像魅力一样! – Ivan