簡體   English   中英

如何在JavaScript中設置會話變量?

[英]How do you set a session variable in JavaScript?

是否可以通過PageMethods調用來完成? 我需要在控件中保存一些變量,以便以后可以在另一個頁面上的控件中使用它們。 有沒有辦法通過JavaScript做到這一點?

聽起來您需要CookielocalStorage或sessionStorage

您可以使用JS來更改隱藏字段中的值,並在回發中捕獲它們,就我個人而言,如果僅在當前會話的生命周期中需要該值,我個人認為這比使用cookie更可取。

無法使用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,也可以對webmethod進行ajax調用!

用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的信息,請參見我的文章: 為什么此JavaScript代碼忽略超時?

您可能想添加參數no_cache = TIME_IN_MILLISECONDS,以擊敗瀏覽器緩存。

我喜歡通過以下方式進行操作:

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM