[英]How do you set a session variable in JavaScript?
是否可以通過PageMethods調用來完成? 我需要在控件中保存一些變量,以便以后可以在另一個頁面上的控件中使用它們。 有沒有辦法通過JavaScript做到這一點?
聽起來您需要Cookie , localStorage或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.