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