我想使用jquery ajax调用C#方法,该方法不返回任何东西,而是直接修改aspx页面中的数据。我的调用工作正常,但我无法通过该方法对UI进行任何更改。
的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";
}
注意:必须在函数中实现的更改,如果我删除了javascript中的注释部分,那么ajax调用抛出错误警告消息
答案 0 :(得分:0)
ServerSideMethod
应声明为static
:
[WebMethod]
public static string ServerSideMethod()
并且您无法从Label1.Text
内部更改ServerSideMethod
,因为它是static
。
答案 1 :(得分: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');
}
答案 2 :(得分:0)
尝试在javascript代码中取消注释您的行,并在WebMethod中添加ScriptMethod属性
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)
public string ServerSideMethod(){
//Label1.Text="Hi";
return "Hi ajax call to C# method";
}
为什么你有Label1.Text =“你好”?这在WebMethod中是不可能的。