嗨,我最近爱上了一个 扩展上传按钮控制 我发现 这里 当与 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);
        }

据我所知,问题在于注册的控件 'onsubmit语句'对于页面上的所有控件 '文档.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);

然后在实际的按钮控件上,将其连接起来以调用您在上面注册的新 DoClick() javascript 函数——如下所示:

<input type="button" value="ClickMe" onclick="DoClick()" />
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top