我坚持一个条件,我需要在页面之间共享值。我想通过很少或没有javascript从Codebehind分享价值。我已经在SO上有一个问题,但是使用JS。仍然没有得到任何结果,所以我要问的另一种方法。
所以我想知道我可以在查询字符串中传递任何.net对象。所以我可以方便地在另一端拆箱。
更新
或者是否有任何JavaScript方法,将其传递给Windows模式对话框。或类似的东西。
我在做什么
我正在做的是在我的父页面加载。我从我的类中提取具有从db获取的值的属性。并把它放在Session["mySession"]
。有点像这样。
Session["mySession"] = myClass.myStatus which is List<int>;
现在我的一个事件是来自客户端的复选框点击事件,我正在打开一个弹出窗口。并在其页面加载,提取列表并填写子页面上的复选框列表。
现在,用户可以修改其选择并关闭此页面。关闭是通过一个名为save的按钮完成的,我在其中迭代检查的项目并再次在Session [“mySession”]中发送它。
但问题出在这里,当我再次点击单选按钮查看更新的值时,它会显示前一个。也就是说,如果我的列表总数是3,那么修改后它是1.重新打开后,它仍然显示3而不是1。
答案 0 :(得分:4)
是的,你可以,但你必须序列化该值,以便它可以编码为字符串。我认为更好的方法是put the object in session,而不是网址。
答案 1 :(得分:2)
我会这样的。
var stringNumbers = intNumbers.Select(i => i.ToString()).ToArray();
var qsValue = string.Join(",", stringNumbers);
Request.Redirect("Page.aspx?numbers=" + sqValue);
请记住,如果数字太多,查询字符串不是最佳选择。还要记住,任何人都可以看到查询字符串,因此如果此数据需要是安全的,请不要使用查询字符串。请记住其他海报的建议。
注意强>
如果您使用的是.NET 4,则可以简化上述代码:
var qsValue = string.Join(",", intNumbers);
答案 2 :(得分:0)
使对象可序列化并将其存储在进程外会话中。
然后,您的Web应用程序中的所有页面都可以访问该对象。
答案 3 :(得分:0)
答案 4 :(得分:-1)
我可能会使用cookie来存储对象。