在Javascript中分配文本框的值,并使用C#在会话中设置值

时间:2015-11-03 14:13:56

标签: javascript c# asp.net session events

我一直在用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;
    }

有没有人知道为什么我的事件都没有被解雇?你有替代解决方案我可以尝试吗?

2 个答案:

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