我一直在用Javascript / C#问题挣扎一段时间。我一直试图从Javascript设置Session变量。我之前尝试使用页面方法但导致我的javascript崩溃。
在javascript中:
PageMethods.SetSession(id_Txt, onSuccess);
这个页面方法:
[System.Web.Services.WebMethod(true)]
public static string SetSession(string value)
{
Page aPage = new Page();
aPage.Session["id"] = value;
return value;
}
我没有取得任何成功。因此,我尝试从我的javascript设置文本框的值,并在我的c#中放置一个OnTextChanged事件来设置会话变量,但事件不会被触发。
在javascript中:
document.getElementById('spanID').value = id_Txt;
在html中:
<asp:TextBox type="text" id="spanID" AutoPostBack="true" runat="server"
ClientIDMode="Static" OnTextChanged="spanID_TextChanged"
style="visibility:hidden;"></asp:TextBox>
在cs中:
protected void spanID_TextChanged(object sender, EventArgs e)
{
int projectID = Int32.Parse(dropdownProjects.SelectedValue);
Session["id"] = projetID;
}
有没有人知道为什么我的事件都没有被解雇?你有替代解决方案我可以尝试吗?
答案 0 :(得分:1)
我发现了这个问题,我没有enableSession = true
,我必须使用HttpContext.Current.Session["id"] = value
,就像mshsayem所说的那样。现在我的事件被正确触发并设置了会话变量。
答案 1 :(得分:1)
首先,确保启用了sessionState(web.config):
<sessionState mode="InProc" timeout="10"/>
其次,确保您启用了页面方法:
<asp:ScriptManager ID="sc1" runat="server" EnablePageMethods="True">
</asp:ScriptManager>
第三,像这样设置会话值(因为方法是静态的):
HttpContext.Current.Session["my_sessionValue"] = value;
示例aspx:
<head>
<script type="text/javascript">
function setSessionValue() {
PageMethods.SetSession("boss");
}
</script>
</head>
<asp:ScriptManager ID="sc1" runat="server" EnablePageMethods="True">
</asp:ScriptManager>
<asp:Button ID="btnSetSession" Text="Set Session Value (js)" runat="server" OnClientClick="setSessionValue();" />
<asp:Button ID="btnGetSession" Text="Get Session Value" runat="server" OnClick="ShowSessionValue" />
<br/>
<asp:Label ID="lblSessionText" runat="server" />
示例代码:
[System.Web.Services.WebMethod(true)]
public static string SetSession(string value)
{
HttpContext.Current.Session["my_sessionValue"] = value;
return value;
}
protected void ShowSessionValue(object sender, EventArgs e)
{
lblSessionText.Text = Session["my_sessionValue"] as string;
}