我可以通过查询字符串传递.net对象吗?

时间:2011-01-25 15:21:13

标签: c# asp.net

我坚持一个条件,我需要在页面之间共享值。我想通过很少或没有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。

5 个答案:

答案 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来存储对象。