ASP.NET - Как зарегистрировать несколько вызовов JavaScript для запуска на PostBack? - PullRequest
1 голос
/ 10 февраля 2011

У меня есть страница 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 Ответ

1 голос
/ 10 февраля 2011

Это должно делать то, что вы хотите, не привязывая элементы управления к странице.

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

...