Asp.net 注册扩展按钮控件的onsubmit语句时出现问题

Asp.net 注册扩展按钮控件的onsubmit语句时出现问题,asp.net,onsubmit,Asp.net,Onsubmit,嗨,我最近爱上了一个扩展上传按钮控件,我发现当与aspnet文件上传控件一起使用时,可以像gmail一样执行上传。唯一的问题是,当控件放置在页面上时,该页面上的任何按钮都会触发扩展控件的单击事件。 在查看源代码之前,我不知道为什么会发生这种情况 /// Basic registration of events protected override void OnInit(EventArgs e) { this.Page.LoadComple

嗨,我最近爱上了一个扩展上传按钮控件,我发现当与aspnet文件上传控件一起使用时,可以像gmail一样执行上传。唯一的问题是,当控件放置在页面上时,该页面上的任何按钮都会触发扩展控件的单击事件。

在查看源代码之前,我不知道为什么会发生这种情况

/// Basic registration of events
        protected override void OnInit(EventArgs e)
        {
            this.Page.LoadComplete += new EventHandler(Page_LoadComplete);
            base.OnInit(e);
            this.Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "ScriptBlock", this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "WebControls.JScripts.AIMScript.js"));
            string cid = this.ClientID;
            string onsubmitstatement = "return AIM.submit( document.forms[0], {'onStart' : " + OnStartScript + ", 'onComplete' : " + OnCompleteScript + "})";
            this.Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "OnSubmitScript", onsubmitstatement);
        }
据我所知,问题在于控件为所有控件注册了'onsubmitstatement 在页面上的表单,即“document.forms[0]”。现在,我在编写自定义控件方面的经验非常有限,因此我所有为上传控件注册“onsubmitstatement”的努力都失败了,例如

string ctrlid = this.ClientID 
string onsubmitstatement = "return AIM.submit( document.getElementById('" + ctrlid + "'), {'onStart' : " + OnStartScript + ", 'onComplete' : " + OnCompleteScript + "})";

有人能帮我吗?有没有办法只为这个控件注册onsubmit函数?

我们需要知道AIMScript.js到底在做什么才能真正回答这个问题

不过,最基本的想法是,您需要更改javascript,以便它在特定按钮的单击事件上执行该操作,而不是截取整个表单的提交事件。但也可能是这个特定的javascript在其他方面也依赖于表单元素

它可以很简单,只需将注册更改为注册javascript DoClick函数,如下所示:

string onsubmitstatement = "function DoClick() {return AIM.submit( document.forms[0], {'onStart' : " + OnStartScript + ", 'onComplete' : " + OnCompleteScript + "})}";
this.Page.ClientScript. RegisterClientScriptBlock(this.GetType(), "OnSubmitScript", onsubmitstatement);
<input type="button" value="ClickMe" onclick="DoClick()" />
然后在实际的按钮控件上,将其连接起来,以调用您在上面注册的新DoClick()javascript函数——如下所示:

string onsubmitstatement = "function DoClick() {return AIM.submit( document.forms[0], {'onStart' : " + OnStartScript + ", 'onComplete' : " + OnCompleteScript + "})}";
this.Page.ClientScript. RegisterClientScriptBlock(this.GetType(), "OnSubmitScript", onsubmitstatement);
<input type="button" value="ClickMe" onclick="DoClick()" />

您能看一下客户端代码吗?“->打开浏览器->右键单击->查看代码/源代码”并在此处发布每个按钮的代码(如果没有百分之^^)。