我正在做一个网站,我必须使用ajax,并想知道是否有办法从服务器端调用方法而不将方法设置为静态。我研究了这个但是我找到的每个例子都将方法设置为静态,并且想知道你是否可以使用静态这里是我的代码
Ajax代码:
function GetAddColour(id, Name) {
var dataValue = { "id": id, "Name": Name }
$.ajax({
url: "AddColour.aspx/btnAddColour",
type: "POST",
dataType: "json",
data: dataValue,
contentType: "application/json; charset=utf-8",
success: function (msg) {
alert("Success");
},
error: function (e) {
alert(JSON.stringify(e));
}
});
}
C#代码:
[WebMethod]
public static void btnAddColour(int id, string Name)
{
//do things to add colour
}
如果没有静态方法,有没有办法,我也不能使用更新面板。
答案 0 :(得分:6)
使用ASP.NET AJAX页面方法您可以访问Session
对象,因此如果您将登录的用户名存储在Session["User"]
中,那么您可以执行以下操作:
代码隐藏:
[WebMethod(EnableSession = true)]
public static string GetLoggedInUserName()
{
return HttpContext.Current.Session["User"].ToString();
}
标记:
$.ajax({
url: "AddColour.aspx/GetLoggedInUserName",
type: "POST",
dataType: "json",
data: "{}",
contentType: "application/json; charset=utf-8",
success: function (result) {
if (result.hasOwnProperty("d")) {
// Need to de-reference the JSON via the .d
alert(result.d);
}
else
{
// No .d; no de-reference necessary
alert(result);
}
},
error: function (e) {
alert(JSON.stringify(e));
}
});
注意:
.d
语法是Microsoft在ASP.NET AJAX的ASP.NET 3.5版本中提供的反XSS保护;因此,检查.d属性是否存在。
答案 1 :(得分:0)
假设您使用的是Web表单而不是ASP.Net MVC,则可以创建*.ashx
HttpHandler。它就像一个*.aspx
页面,但要简单得多。您的代码隐藏必须实现IHttpHandler
接口(1个方法,ProcessRequest()
和1个属性IsReusable
)。如果您需要访问会话状态,您还需要“实现”(用词不当,因为这些都是标记接口,无需实现)IReadonlySessionState
(只读访问)或IRequiresSessionState
(读/写访问)。
然而,在这里你几乎要做的事情从汤到坚果。您可以返回JSON,二进制图像数据,无论您的小心愿如何。
答案 2 :(得分:0)
将您的数据值修改为此。
var dataValue = "{id :'" + id + ", Name :'"+ Name "'}" ;
其中id和name是两个分别具有整数和字符串值的变量。 确保id为整数,如果不是则将其更改为Number(id)
Javascript:
function GetAddColour(eid, eName) {
var id = Number(eid);
var Name = eName;
var dataValue = "{id :'" + id + ", Name :'"+ Name "'}" ;
$.ajax({
url: "AddColour.aspx/btnAddColour",
type: "POST",
dataType: "json",
data: dataValue,
contentType: "application/json; charset=utf-8",
success: function (msg) {
alert("Success");
},
error: function () { alert(arguments[2]); }
});
}
并且您的C#网络方法应该是
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static void btnAddColour(int id, string Name)
{
// Your code here
}