如何在JavaScript中设置会话变量?

时间:2011-09-28 19:57:05

标签: javascript asp.net

可以通过PageMethods调用完成吗?我需要在控件中保存一些变量,以便以后控件可以在另一个页面上使用它们。有没有办法通过JavaScript做到这一点?

5 个答案:

答案 0 :(得分:3)

听起来你需要cookieslocalStorage, or sessionStorage

答案 1 :(得分:3)

您可以使用JS来更改隐藏字段中的值,并在回发上捕获它们,如果仅在当前会话的生命周期中需要该值,我认为这对于cookie使用是个好的。

答案 2 :(得分:0)

使用PageMethods执行此操作是一个非常糟糕的主意。

您可以添加通用处理程序(* .ashx),然后对此URL执行XMLhttpRequest,并将其传递给参数。

请注意,ashx处理程序需要从IRequiresSessionState继承,才能访问会话。

您也可以通过这种方式获得会话值。

像这样:

using System.Web;
using System.Web.SessionState;

public class Handler : IHttpHandler , IRequiresSessionState
{
   public void ProcessRequest (HttpContext context) 
   {
      context.Response.ContentType = "text/plain";
      context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

      string item = context.Request.QueryString["item"] ?? "";
      string update = context.Request.QueryString["update"] ?? "";

      switch (item)
      {
         case "A":

            if (!string.IsNullOrEmpty(update))
               context.Session["A"] = update

            object a = context.Session["A"];   
            context.Response.Write(a != null ? (string) a : "none");

            break;

         case "B":

            if (!string.IsNullOrEmpty(update))
               context.Session["B"] = update

            object b = context.Session["B"];
            context.Response.Write(b != null ? (string) b : "none");

            break;
      }
   }

   public bool IsReusable 
   {
      get { return false; }
   }
} 

请在此处查看XMLhttpRequest的帖子: Why does this JavaScript code ignore the timeout?

您可能需要添加参数no_cache = TIME_IN_MILLISECONDS,以便击败浏览器缓存。

答案 3 :(得分:0)

我喜欢以下列方式:

的javascript:

function SendData(data) {
    var postbackarg = "@@@@@" + data;
    __doPostBack("txtTest", postbackarg);
}

VB在Page_Load事件中:

If Me.IsPostBack Then
    Dim controlName As String = Request.Params.Get("__EVENTTARGET")
    Dim args As String = Request.Params.Get("__EVENTARGUMENT")
    ProcessUserInterfaceData(controlName, args)
    If (controlName = "txtTest" AndAlso args.IndexOf("@@@@@") = 0) Then
        args = args.Substring(5, args.Length - 5)
        'args now = data from the UI
    End If
End If

这是从我在其他地方找到的一个例子开始的。我找不到它.5'@'的唯一目的是将回发标识为来自SendData。

答案 4 :(得分:0)

无法直接使用Javascript设置会话变量 但您可以使用以下代码在aspx页面中设置会话变量

<%Session["SESSION VARIABLE NAME"] ="SOME STRING"; %>

您可以使用javascript中的提醒检查相同的变量

 alert('<%=Session["SESSION VARIABLE NAME"] %>');

是会话变量可以使用Pagemethods使用以下方式设置

在aspx.cs页面中声明以下代码

  [WebMethod]
        public static void functionname(string st)
        {
            Home h = new Home();
            System.Web.HttpContext.Current.Session["SessionUserName"] = st;
            h.strUserName = (string)System.Web.HttpContext.Current.Session["SessionUserName"];
        }

并使用aspx

中的pagemethod调用该函数
 PageMethods.functionname("HELLO");

这会将会话变量设置为HELLO

如果你不想使用pagemethods.function,你也可以对web方法进行ajax调用!!