我有这个问题:
我如何从jquery调用codebehind方法?我有一个网页:( ForgetPass.aspx)及其各自的代码隐藏(ForgetPass.aspx.cs)。在代码隐藏上我有一个公共方法:
public void ChangeSession(string strChangeSession)
{ some stuff... }
当我在使用MVC时,调用该方法非常简单:
$.post("MyPageController/ChangeSession", { strChangeSession: 'yes' });
但是现在我正在使用aspx / C#我不知道如何从jquery调用该方法(或者我可能需要在代码隐藏中使用[WebMethod]
子句?)
提前致谢。
答案 0 :(得分:5)
There's a full run down here that explains the whole process :)
是的,你需要[WebMethod]
并且它也需要是静态的,请阅读教程以获得有关这些位的解释。
根据您的方法名称,您可能需要这样:
[WebMethod (EnableSession = true)] //Allows access to session state
public void ChangeSession(string strChangeSession)
{ some stuff... }
答案 1 :(得分:2)
您需要将页面方法设置为静态,并且还需要将其标记为[WebMethod],以便您可以使用jquery ajax来访问它:
var loc = window.location.href;
$.ajax({
type: 'POST',
url: loc + "/GetMessage",
data: "{}",
contentType: "application/json; charset=utf-8"
})
.success(function (response) {
alert(response.d);
})
.error(function (response) {
alert(response.d);
});
在此处获取完整示例:http://www.codegateway.com/2012/05/jquery-call-page-codebehind-method.html
答案 2 :(得分:1)
实现这一目标的几种方法。如上所述,请查看.NET PageMethod / WebMethods。它将向您展示如何构建WebMethods并从Javascript调用它们。
我一直在改变.NET预构建的东西,并使用直接的jQuery ajax调用。这是一回事,但是使用jQuery你可以更好地控制它和它返回的内容。
jQuery.ajax({
type: "POST",
url: "edit.aspx/yourmethodname",
data: "{yourmethodparam:" + somevar + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(response) {
alert(response.d);
}
error: function(err, response) {
alert("error");
}
});
它更复杂,但您可以更好地控制返回的对象类型,JSON或文本。
请记住,response.d如果您决定返回更多只是简单类型(如字符串或整数),则“d”是JSON对象。您可以返回列表等对象。这些将转换为JSON对象。如果它是一个像整数这样的简单类型,那么只需'响应'就可以了。
如果你决定更复杂并使用JSON返回对象,请观察'datatype'属性,有时我发现.NET返回必须使用json2.js文件转换为JSON的字符串对象 - http://www.json.org/js.html 。它把我扔了很长一段时间。这是一个很好的网站,可以解释JSON,因为这就是PageMethod / WebMethods真正使用的。