2014-01-27 99 views
2

我想調用C#方法使用jquery ajax,該方法不返回任何東西,而是直接修改aspx頁面中的數據。我的電話工作完全正常,但我無法從該方法對UI進行任何更改。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

用'console.log(msg.d)'替換'alert(「E」);''你有什麼東西在控制檯中? – christiandev

+0

您的評論_if我刪除評論部分..._。那麼答案是正確的,因爲你的ajax需要從你的控制器獲得一個對象,並且你從那裏返回一個字符串,這樣就會導致錯誤。 – Jai

回答

0

ServerSideMethod應宣佈爲static

[WebMethod] 
public static string ServerSideMethod() 

並且您不能從ServerSideMethod內部更改Label1.Text,因爲它是static

0

服務器端代碼不能更改任何客戶端。爲了建立到客戶機的響應

Label1.Text="Hi"; 

通常,在非AJAX頁面請求時,服務器端代碼運行語句等。一旦這個響應被髮送,它就不再受服務器端代碼的控制。由於您正在從已呈現的頁面發出AJAX請求,因此無法從服務器修改該頁面(瀏覽器中已存在)。

相反,您應該呈現對AJAX調用的響應,並使用JavaScript代碼修改瀏覽器中的頁面。

你沒有顯示標記,所以我只能猜測選擇器是什麼。但是,如果Label1渲染span並使用相同的id客戶端,那麼它可能是這樣的:

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

這將是你的AJAX調用的成功回調。事情是這樣的:

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

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

嘗試取消註釋你行JavaScript代碼,並在你的WebMethod

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

添加ScriptMethod屬性以及爲什麼你有Label1.Text = 「你好」?在WebMethod中是不可能的。