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 гарантированно будет уникальным на странице, поэтому оно будет хорошим кандидатом.

Другие вопросы по тегам