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