1

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

第一个实例似乎正在工作,但第二个实例无法将更改发布回服务器(它恢复为原始实例,并发布)。我相信问题在于 JS 只为第一个 WUC 触发。我已经从生成的客户端源跟踪到以下代码:

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

问题似乎是应该有两个调用prepHtml:一个用于ctlEditorQuestionWUC 的实例,一个用于ctlEditorAnswer实例。

相反,只有一个 for 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只要代码仍然在提交时被触发,我对替代方案持开放态度。

4

1 回答 1

1

这应该可以满足您的要求,而无需将控件紧密耦合到页面。

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);
    }
}

The key (as I mentioned in my comment) is the unique name. Notice that I use "this.ID" in the script name. The ID property is guaranteed to be unique within the page, so it would be a good candidate.

于 2011-02-10T01:03:20.220 回答