【问题标题】:Raise event on custom server control from ajax?从ajax引发自定义服务器控件的事件?
【发布时间】:2014-05-18 16:42:22
【问题描述】:

我有一个自定义服务器控件,它添加到许多不同的 asp.net 页面(它生成一个 blueimp jquery 文件上传插件)。

如何通过 javascript/ajax 在该服务器控件上引发事件?还是来自 http 处理程序? 在 jquery 文件上传使用 ajax 将一些文件发布到 HTTP 处理程序之后,我想在该控件上引发 OnFileUploaded 事件?

编辑 - 除了 Dalorzo 的回答:

我使用了@Dalorzo 编写的代码。 然后我不得不像这样回发到我的控件作为目标:

myctrlPostBackEventReference = Page.ClientScript.GetPostBackEventReference(myCtrl, "");
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "initMyClientVariable", "var postBackEventReference=\"" + myctrlPostBackEventReference + "\";", true);

并在我的 javascript 文件中添加:

eval(postBackEventReference)

执行它。

然后我仍然有一个问题,我想阻止整页呈现,所以我使用了相同的方法,但我将目标返回到一个“虚拟”更新面板。更新面板引发了我所需控件上的事件(我已将所需控件 ID 作为 __EVENTARGUMENT(GetPostBackEventReference 的第二个参数)发送给更新面板以区分实际应该引发哪个事件。

【问题讨论】:

    标签: asp.net ajax events custom-controls custom-server-controls


    【解决方案1】:

    您需要实现IPostaBackEventHandler 和/或IScriptControl 类似:

    [ToolboxData("<{0}:ComboBox runat=server></{0}:ComboBox>")]
    public class ComboBox : DropDownList, IScriptControl, IPostBackEventHandler 
    {
    

    这里是你如何使用IPostBackEventHandler

      // Defines the Change event. 
      public event EventHandler Change;
    
      //Invoke delegates event Change. 
      protected virtual void OnChange(EventArgs e) {
    
         if (Change != null) {
            Change(this, e);
         }   
      }
    
      // Implements IPostBackEventHandler that raises the change events. 
      public void RaisePostBackEvent(string eventArgument){
         OnChange(new EventArgs());
      }
    

    【讨论】:

    • 如果我的妻子没有杀人,我稍后会回来提供更多细节:D
    • 谢谢,但我不打算回发,应该从 ajax 或 jquery 插件将其文件发送到的 http 处理程序完成:(
    猜你喜欢
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多