繁体   English   中英

ASP.NET-如何注册多个JavaScript调用以在PostBack上运行?

[英]ASP.NET - How do I register multiple JavaScript calls to run on PostBack?

我有一个带有相同Web用户控件的两个实例(一个简单的WYSIWYG编辑器)的ASP.NET页。 在提交时,WUC会做一点JavaScript魔术,然后继续进行正常的回发。

第一个实例似乎可以正常工作,但是第二个实例无法将更改发布回服务器(它还原为原始实例,然后将其发布)。 我认为问题在于JS只为第一个WUC触发。 我已经从生成的客户端源中将其追溯到以下代码:

function WebForm_OnSubmit() {
    prepHtml('AddEditPopup1_ctlEditorQuestion_txtEdit','AddEditPopup1_ctlEditorQuestion_divEdit', 'AddEditPopup1_ctlEditorQuestion_divHT' );        
    //snip...
}

问题似乎是应该对prepHtml进行两次调用:一个调用WUC的ctlEditorQuestion实例,另一个ctlEditorAnswer实例。

相反,只有ctlEditorQuestion一个。 这两个控件都在注册OnSubmit事件,但是其中一个覆盖另一个。

prepHtml调用是在运行时从WUC的C#代码中注册的:

//Page_Load
_onSubmit = String.Format("prepHtml('{0}','{1}', '{2}' );", 
                txtEdit.ClientID, divEdit.ClientID, divHT.ClientID);

//OnPreRender
Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "get-html", _onSubmit);

我应该指出,我不是自己编写此控件的,而且我之前从未见过这种OnSubmit JS代码的运行时注册。 Page.ClientScript.RegisterOnSubmitStatement对我来说是全新的。

我需要注册两个prepHtml调用,以便它们按顺序运行。 这可能吗? 我愿意接受Page.ClientScript.RegisterOnSubmitStatement替代Page.ClientScript.RegisterOnSubmitStatement ,只要代码在提交时仍被触发即可。

这应该在不将控件紧密耦合到页面的情况下完成所需的操作。

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        string onSubmit = string.Format("prepHtml('{0}','{1}', '{2}';",
            txtEdit.ClientID,
            divEdit.ClientID,
            divHT.ClientID);

        Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), 
            this.Id + "_getHtml", onSubmit);
    }
}

密钥(正如我在评论中提到的)是唯一名称。 请注意,我在脚本名称中使用了“ this.ID”。 保证ID属性在页面内是唯一的,因此它是一个很好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM