如何从AJAX调用非静态方法?

时间:2012-09-14 06:29:09

标签: asp.net ajax json

这是我从AJAX调用的代码......

    [WebMethod]
    [ScriptMethod]
    public static string save(string parameter)
    {
        country_master obj_country = new country_master();
        obj_country.Country_Name = Page.Request.Params["name"].ToString().Trim();
        obj_country.saved();
        return "";
    }

这里我无法通过Page.Request访问从页面传递的参数。

string name = HttpContext.Current.Request.QueryString["name"].Trim();
return "error";

写完第一行后,return语句不会向AJAX返回任何内容。 请帮我解决这个问题。 感谢...

2 个答案:

答案 0 :(得分:5)

要获取当前上下文,您可以使用HttpContext.Current,这是一个静态属性。

完成后,您可以访问会话或个人资料等内容,并获取有关网站状态的信息

HttpContext.Current.Session等。

此链接可以为您提供帮助:Call Server Side via AJAX without a Static Method

将Web方法限制为静态的原因是避免它访问实例页面的控件。

答案 1 :(得分:0)

Yo可以使用HttpContext.Current静态类,但如果您在方法上声明要使用的参数并且只是通过AJAX调用传递参数,则可以跳过它

您应该将参数直接传递给方法。

我有几个工作示例on my Github repository,随时可以浏览代码。

总结一下,要调用PageMethod:

注意:如何使用AJAX jobID PageMethod参数与请求一起传递以及如何在PageMethod中透明地使用

AJAX调用

             $.ajax({
                type: 'POST',
                url: '<%: this.ResolveClientUrl("~/Topics/JQuery/Ajax/PageMethods_JQueryAJAX.aspx/GetEmployees") %>',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                data: '{"jobID" : ' + jobID +'}',
                async: false,
                cache: false,
                success: function (data) {
                    $('#employees').find('option').remove();
                    $.each(data.d, function (i, item) {
                        $('<option />').val(item.EmployeeID).text(item.FirstName).appendTo('#employees');
                    });
                },
                error: function (xhr) {
                    alert(xhr.responseText);
                }
            });

页面方法

    [WebMethod]
    public static List<EmployeeModel> GetEmployees(int jobID)
    {
        var ctx = new PubsDataContext();

        return (from e in ctx.employee
                where e.job_id == jobID
                orderby e.fname
                select new EmployeeModel
                {
                    EmployeeID = e.emp_id,
                    FirstName = e.fname
                }).ToList();
    }