Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中设置会话变量?_Javascript_Asp.net - Fatal编程技术网

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

如何在JavaScript中设置会话变量?,javascript,asp.net,Javascript,Asp.net,这可以通过PageMethods调用完成吗?我需要在一个控件中保存一些变量,以便以后在另一个页面上的控件可以使用它们。有没有办法通过JavaScript实现这一点?听起来像是需要的。您可以使用JS更改隐藏字段中的值,并在回发中捕获它们,我个人认为,如果该值仅在当前会话的生命周期内需要,那么使用cookie更可取。使用PageMethods进行此操作是一个非常糟糕的主意 您可以添加一个通用处理程序(*.ashx),然后对此URL执行XMLhttpRequest,并向其传递参数 请注意,ashx处理

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

听起来像是需要的。

您可以使用JS更改隐藏字段中的值,并在回发中捕获它们,我个人认为,如果该值仅在当前会话的生命周期内需要,那么使用cookie更可取。

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

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

请注意,ashx处理程序需要从IRequiresessionState继承,以便访问会话

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

像这样:

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,请参见我的帖子:


您可能需要添加一个参数no_cache=TIME_(以毫秒为单位),以击败浏览器缓存。

我喜欢以下方法:

javascript:

function SendData(data) {
    var postbackarg = "@@@@@" + data;
    __doPostBack("txtTest", postbackarg);
}
页面加载事件中的VB:

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。

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

<%Session["SESSION VARIABLE NAME"] ="SOME STRING"; %>
并在aspx中使用pagemethod调用函数

 PageMethods.functionname("HELLO");
这将把会话变量设置为HELLO


如果不想使用pagemethods.function,还可以对webmethod进行ajax调用

你是说你想要饼干之类的东西吗?或者您正在查找
localStorage/sessionStorage
对象?是cookie或会话值。我不能使用隐藏字段,因为只有当我需要在控件B上访问它时,它才会在控件a上可见。我想您不明白我的答案。您使用隐藏值只是为了将该值中继回服务器,然后捕获该值并将其存储在会话变量中,以后可以在服务器上的任何其他上下文中使用该变量。sessionStorage.setItem()和sessionStorage.getItem()工作得很好!
  [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"];
        }
 PageMethods.functionname("HELLO");