2015-03-30 2 views
1

Я пытаюсь установить переменный на использование WebMethod (.asmx)OnClick и OnClientClick WebMethod выполняется после onlick

Кнопка используется onclick для вызова метода на сторону сервера и onclientclick вызвать яваскрипт Аякс, который вызывает WebMethod ,

Мне нужен код javascript, который должен быть полностью выполнен до того, как вызывается метод endclick server end, но кажется, что вызов ajax не выполняется полностью до того, как выполняется обратная передача.

Предупреждение вызывается перед обратной передачей, однако веб-метод вызывается после обратной передачи. Мне нужна переменная, которая должна быть установлена ​​с веб-метода до завершения обратной передачи. Я попытался вернуть false из javascript, но после этого postback вообще не выполняется.

Я использую Masterpages в asp.net. Также у меня есть аналогичная функция в другом проекте, который отлично работает, единственное отличие в этом заключается в том, что я использую MasterPage.

<asp:TemplateField> 
<ItemTemplate> 
    <asp:Button ID="btnAddRegistration" ClientIDMode="Static" CssClass="btn-sm btn-default" runat="server" 
     CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" 
     onclick="btnAddRegistration_Click" 
     OnClientClick='<%# "getSetContactID(\"" + Container.DataItemIndex + "\")" %>' 
     Text="Add &#010;Registration" /> 
</ItemTemplate> 
</asp:TemplateField> 

Javascript (вызов WebMethod)

function getSetContactID(rowIndex) { 

    var CellValue, cell, dataItemIndex; 
    var table = document.getElementById('<%=gvContactSearch.ClientID %>'); 

    $.ajax({ 
     type: "POST", 
     url: "WebService1.asmx/setContactIDgvContact", 
     data: '{DataItemIndex: "' + rowIndex + '"}', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: alert(rowIndex), <--this gets called before postback 
     failure: function (response) {alert(response.d);} 

     }) 
} 

метод Webservice

[WebMethod] 
     public string setContactIDGV1(int DataItemIndex){ 
      classDetails.gV1DataItemIndex = DataItemIndex; 
      return ""; 
     } 
+0

Попробуйте это: Возвращение всегда ложь от клиента выберите метод getSetContactID и в АЯКС случае успеха явного вызова кнопка постбэк метод-клиента://stackoverflow.com/questions/1305954/asp-net-postback-with-javascript – malkam

+1

попытайтесь установить ** async: false ** свойство в jquery ajax. – sharad

ответ

3

То, что вы здесь классическая гонка условие сценария.

По умолчанию вызов AJAX является асинхронным, поэтому, когда вы запускаете вызов AJAX, логический код JS логически заканчивается, а следующее последовательное событие запускается, в данном случае - событие на стороне сервера. Это - гонка между функцией, которую выполнил код AJAX, и событием onclick на стороне сервера. Как я вижу это у вас есть несколько вариантов:

  1. вызове метода веб-службы внутри серверной стороне по методу щелчка
  2. Предотвратить элемент по умолчанию действие внутри блока JS (event.preventDefault) и зацепить что-нибудь внутри success метода AJAX, который заканчивает последовательность
  3. Установите async: false опцию на вызов AJAX
+0

Хорошо объяснил! – Jamil

+0

async: false сделал это для меня! – Daren

Смежные вопросы