可以通过PageMethods调用完成吗?我需要在控件中保存一些变量,以便以后控件可以在另一个页面上使用它们。有没有办法通过JavaScript做到这一点?
答案 0 :(得分:3)
答案 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调用!!