2014-01-27 2 views
2

Я хочу вызвать метод C# с помощью jquery ajax, метод ничего не возвращает, вместо этого он напрямую изменяет данные на странице aspx. Мой вызов работает отлично, но я не могу вносить какие-либо изменения в пользовательский интерфейс из этого метода.ajax вызывает метод C#

JQuery

$(document).ready(function() { 

     $('#<%=Button1.ClientID %>').click(function() { 
      debugger; 
      $.ajax({ 
       type: "GET", 
       url: "WebForm1.aspx/ServerSideMethod", 
       data: "{}", 
        <%--contentType: "application/json; charset=utf-8", 
       dataType: "json",--%> 
       async: true, 
       cache: false, 
       success: function (msg) { 
        alert("E"); 

        $('#myDiv').text(msg.d); 
       }, 
       error: function (err) { 
        alert("Error"); 
       }, 
       failure: function (response) { 
        alert("ror1"); 
       } 
      }) 
      return false; 
     }); 
    }); 
</script> 

C#

[WebMethod] 

    public string ServerSideMethod(){   
     Label1.Text="Hi"; 
     return "Hi ajax call to C# method"; 
    } 

Примечание: Изменения, которые должны быть implemened только функции, и если я удалить комментируемой части в JavaScript, то Ajax вызова бросает мне ошибку предупреждение

+0

заменить 'alert (" E ");' с 'console.log (msg.d)', вы получаете что-нибудь в консоли? – christiandev

+0

ваш комментарий _if я удаляю прокомментированную часть ..._. Тогда ответ правильный, потому что ваш ajax должен получить объект от вашего контроллера, и вы возвращаете строку оттуда, чтобы вызвать ошибку. – Jai

ответ

0

ServerSideMethod должно быть объявлено static:

[WebMethod] 
public static string ServerSideMethod() 

и вы не можете изменить Label1.Text изнутри ServerSideMethod так как это static.

0

Код на стороне сервера не может ничего изменить на стороне клиента.

Обычно в запросе без AJAX страницы, то код на стороне сервера работает заявления, как:

Label1.Text="Hi"; 

для того, чтобы построить ответ клиенту. Как только этот ответ отправлен, он больше не находится под контролем на стороне сервера. Поскольку вы делаете запрос AJAX с уже обработанной страницы, вы не можете изменить эту страницу (это уже в браузере) с сервера.

Вместо этого вы должны отобразить ответ на вызов AJAX и использовать код JavaScript для изменения страницы, находящейся в браузере.

Вы не показываете разметку, так что я могу только догадываться, что такое селектор. Но если Label1 оказывает span и использует тот же id на стороне клиента, то это может выглядеть следующим образом:

$('#Label1').text('Hi'); 

Это было бы в успех обратного вызова вашего вызова AJAX. Что-то вроде этого:

success: function (msg) { 
    alert("E"); 
    $('#myDiv').text(msg.d); 

    $('#Label1').text('Hi'); 
} 
0

пытаются раскомментировать свою линию в JavaScript код и добавить атрибут ScriptMethod в вашем WebMethod

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json) 
public string ServerSideMethod(){   
    //Label1.Text="Hi"; 
    return "Hi ajax call to C# method"; 
} 

А почему у вас есть Label1.Text = "Привет"? Это невозможно в WebMethod.

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