这是我从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返回任何内容。 请帮我解决这个问题。 感谢...
答案 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({
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();
}