ASP.NET - Как зарегистрировать несколько вызовов JavaScript для запуска на PostBack?
У меня есть страница ASP.NET с двумя экземплярами одного и того же пользовательского веб-элемента управления (простой редактор WYSIWYG). При отправке, WUC немного фокусируются на JavaScript, а затем продолжают обычную обратную передачу.
Кажется, что первый экземпляр работает, но второй не может отправить изменения обратно на сервер (он возвращается к оригиналу и публикует это). Я считаю, что проблема в том, что JS стреляет только для первого WUC. Я проследил это до следующего кода из сгенерированного клиентского источника:
function WebForm_OnSubmit() {
prepHtml('AddEditPopup1_ctlEditorQuestion_txtEdit','AddEditPopup1_ctlEditorQuestion_divEdit', 'AddEditPopup1_ctlEditorQuestion_divHT' );
//snip...
}
Проблема, кажется, в том, что должно быть два вызова prepHtml
: один для ctlEditorQuestion
экземпляр WUC, и один для ctlEditorAnswer
пример.
Вместо этого есть только один для ctlEditorQuestion
, Оба элемента управления регистрируют событие OnSubmit, но один из них перезаписывает другой.
prepHtml
вызов регистрируется из кода C# WUCs во время выполнения:
//Page_Load
_onSubmit = String.Format("prepHtml('{0}','{1}', '{2}' );",
txtEdit.ClientID, divEdit.ClientID, divHT.ClientID);
//OnPreRender
Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "get-html", _onSubmit);
Я должен отметить, что я сам не писал этот элемент управления и никогда раньше не видел такого рода регистрации кода JS OnSubmit. Page.ClientScript.RegisterOnSubmitStatement
это совершенно новое для меня.
Мне нужно зарегистрировать оба prepHtml
звонки, чтобы они выполнялись последовательно. Это возможно? Я открыт для альтернатив Page.ClientScript.RegisterOnSubmitStatement
, пока код все еще запускается при отправке.
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);
}
}
Ключ (как я уже упоминал в моем комментарии) - это уникальное имя. Обратите внимание, что я использую "this.ID" в имени скрипта. Свойство ID гарантированно будет уникальным на странице, поэтому оно будет хорошим кандидатом.