通过Ajax调用c#方法而不使用静态方法

时间:2013-12-12 19:23:55

标签: c# jquery asp.net ajax

我正在做一个网站,我必须使用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
}

如果没有静态方法,有没有办法,我也不能使用更新面板。

3 个答案:

答案 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
}