jQuery Click против User Click другое поведение в ASP.NET - PullRequest
2 голосов
/ 01 февраля 2012

Проблема заключается в следующем:

У меня есть UserControl_1 внутри UserControl_2, а у UserControl_1 есть событие, на которое подписывается UserControl_2.Это событие вызывается при нажатии кнопки в UserControl_1.

Когда пользователь вручную нажимает эту кнопку, все в порядке, и событие хорошо перенаправляется в обработчик в UserControl_2, НО , когданажатие на эту кнопку выполняется через jQuery, событие не перенаправляется на UserControl_2.

Проблема заключается в том, что несмотря на то, что вызывается обработчик кнопки в UserControl_1, при попытке перенаправить событие на UserControl_2, обработчикnull, как будто ни один элемент управления не подписан на него.

Код, который маршрутизирует / раздувает событие в UserControl_1, выглядит следующим образом:

public event MyFileUploadCommandEventHandler UploadDone;

protected virtual void OnUploadDone(MyFileUploadCommandEventArgs e)
        {
            if (UploadDone != null)
            {
                UploadDone(this, e);
            }
        }

Здесь при вызове через click в jQuery обработчик UploadDoneвсегда равно нулю.

Мой метод jQuery, который я тестировал двумя способами, уже с одинаковыми результатами:

function DoneCallback() {
        $("[id*='btnDoneCallback']").click();
    }

и

function DoneCallback() {
        __doPostBack('<%=btnDoneCallback.UniqueID%>', '');
    }

В чем разница междупользовательский щелчок и событие щелчка jQuery, вызывающее такое поведение?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

Я решил это, передав идентификатор элемента управления в качестве параметра функции javascript:

function DoneCallback(ctl) {
    var id = '#' + ctl;
    $(id).click();
}

и назовите его как:

<div onclick="javascript:DoneCallback('<%=btnDoneCallback.ClientID%>');">CLICK ME!</div>

Спасибо за вашу помощь!

0 голосов
/ 01 февраля 2012

ASP.NET запускает функцию __doPostBack(eventtarget, eventarguments) при нажатии. Я не совсем уверен, почему вызов .click() на контроле не распространяет TBH. Но вам, вероятно, следует предоставить свойство в ваших пользовательских элементах управления для предоставления этой функции:

public string ClientPostbackFunction
{
    get { return ClientScript.GetPostBackEventReference(Button1, "argument", false); }
}

Затем вы можете связать это с JQuery:

$("#button").click(function() { <%= UserControl1.ClientPostbackFunction %> });
0 голосов
/ 01 февраля 2012

Я думаю, вам нужно найти форму в функции jquery-click, а затем отправить ее;что-то вроде:

$(this).parents("form:first").submit();

На самом деле это не так.Скорее всего, вам нужно будет выполнить JS, который asp.net ожидает связать щелчок с соответствующим обработчиком событий на сервере.Чтобы сгенерировать такой JS на сервере (для выполнения клиентом), вы можете использовать следующие методы:

this.Page.ClientScript.GetPostBackEventReference()
this.Page.ClientScript.GetPostBackClientHyperlink()

Они возвращают строку (код javascript), которую вам нужно будет отобразить на странице, а затемпри необходимости вызовите его из jquery-клика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...