我需要通过使用jQuery调用PageMethod来设置几个Session变量。
客户端js看起来像这样:
function setSession(Amount, Item_nr) {
//alert(Amount + " " + Item_nr);
var args = {
amount: Amount, item_nr: Item_nr
}
//alert(JSON.stringify(passingArguments));
$.ajax({
type: "POST",
url: "buycredit.aspx/SetSession",
data: JSON.stringify(args),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function () {
alert('Success.');
},
error: function () {
alert("Fail");
}
});
}
和服务器端这样:
[System.Web.Services.WebMethod(EnableSession = true)]
public static void SetSession(int amount, int item_nr)
{
HttpContext.Current.Session["amount"] = amount;
HttpContext.Current.Session["item_nr"] = item_nr;
}
仅,似乎没有设置会话变量。当我尝试Response.Write out Session vars时,我什么都没得到。我没有错误,我可以提醒从onclick事件传递给js函数的值,所以它们就在那里。
有人能看到我错过了什么吗?
日Thnx
答案 0 :(得分:4)
你的会话中没有得到任何东西,因为传递给web方法的是null,使用调试器逐步执行你的javascript和c#来查看它的来源。
您发布的代码似乎没问题,因为我设法让它在快速测试页面中工作,所以问题在于代码中的其他位置。这是我的测试代码,希望它有所帮助。
jquery的:
$(document).ready(function () {
$('#lnkCall').click(function () {
setSession($('#input1').val(), $('#input2').val());
return false;
});
});
function setSession(Amount, Item_nr) {
var args = {
amount: Amount, item_nr: Item_nr
}
$.ajax({
type: "POST",
url: "buycredit.aspx/SetSession",
data: JSON.stringify(args),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function () {
alert('Success.');
},
error: function () {
alert("Fail");
}
});
}
HTML:
<div>
Input1: <input id="input1" type="text" />
<br />
Input2 <input id="input2" type="text" />
<br />
<a id="lnkCall" href="#">make call</a>
<br />
<asp:Button ID="myButton" runat="server" Text="check session contents" onclick="myButton_Click" />
<br />
<asp:Literal ID="litMessage" runat="server" />
</div>
C#
[System.Web.Services.WebMethod(EnableSession = true)]
public static void SetSession(int amount, int item_nr)
{
HttpContext.Current.Session["amount"] = amount;
HttpContext.Current.Session["item_nr"] = item_nr;
}
protected void myButton_Click(object sender, EventArgs e)
{
litMessage.Text = "ammount = " + HttpContext.Current.Session["amount"] + "<br/>item_nr = " + HttpContext.Current.Session["item_nr"];
}
答案 1 :(得分:0)
您的变量是否正确传递给您的方法?我会调试并逐步执行它以确保amount
和item_nr
正在进行服务器端方法。如果这是一个问题,您可能需要考虑单独传递您的参数(或者可能将ajax帖子的类型设置为traditional
:
<强>示例:强>
$.ajax({
type: "POST",
url: "buycredit.aspx/SetSession",
//Option 1:
traditional : true,
//Option 2:
data:
{
'amount' : Amount,
'item_nr': Item_nr
},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function () {
alert('Success.');
},
error: function () {
alert("Fail");
}
});
不确定它们是否会有所帮助,但值得一试。