将数据从一个ASP.NET页面传递到另一个页面

问题描述:

好的,这是一个非常常见的web dev中的场景,有一个非常常见的解决方案。所以我在找什么替代解决方案。将数据从一个ASP.NET页面传递到另一个页面

我在PageA中有一些数据,并且我正在重定向到PageB,它需要这些信息。我可以将它存储在查询字符串中,但让我们假装它太复杂了,或者我不希望它在查询字符串中。

所以我把它放在会话中。然后当我到达PageB时,我将它从Session中解脱出来。这就是我们一直在做的事情。

问题是,Session是一袋全局变量。所有的教科书理由都说全局变量是不好的。我们将在应用程序的其他部分中检查该变量并根据它的值进行一些操作。然后我们想改变它,所以我们必须找出它的设置,只有它被设置在无处不在。现在我们需要深入了解用户如何到达PageZ以了解谁设置了该变量。

所以,如果我真的讨厌全局变量和意大利面条代码,有没有其他办法呢?

+1

..为什么不能形成? – Shoban 2011-01-31 19:12:17

+0

或Cookie,或将其写入数据库。 – asawyer 2011-01-31 19:13:41

+0

爱,你是否尝试过表单发布或CrossPage回发?将会话变量维护在一个普通的类中也是一种好的做法。 – 2011-01-31 19:23:39

使用

Page.PreviousPage 

Property(获取传输控制当前页的页面。)

在某些情况下,你可能 要发布一个网页到另一个网页。 例如,您可能正在创建一个 多页表单,该表单会在每个页面上收集不同的信息。在 这种情况下,你可以在页面上配置某些 控制(那些实现 IButtonControl接口,如 Button控件)张贴到 不同的目标页面。这是 简称为cross-page posting。 与使用Transfer 方法重定向到另一个页面相比,跨页面发布提供了一些 的优势。

假设你跳下网页A到_PageB:

public partial class _PageB : System.Web.UI.Page 
{ 
    public void Page_Load(object sender, EventArgs e) 
    { 
     Page PageA = Page.PreviousPage; 

     //............... etc 

我不知道为什么你需要知道谁和什么设置变量,以便能够使用它。但是,如果我理解正确,你可能只是不喜欢使用会话[]需要你依赖的魔术字符串。在那种情况下,为什么不把Session对象包装在一个辅助类中呢?也许是这样的:

class SessionHelper{ 
    const string FAVORITE_COLOR_KEY = "favcolor" 
    public static string FavoriteColor { 
    get { return Session[FAVORITE_COLOR_KEY]; } 
    set { Session[FAVORITE_COLOR_KEY] = value; } 
    } 
} 

这样,你可以在任何时候改变魔术字符串“favcolor”到任何你想要的,而不是打破任何代码。

最简单的解决方案,我认为(仍然使用会话):让一个对象具有所有你想要的。将该对象存储在会话中,名称为GUID(不可重用)。在查询字符串上做一个只传递一个GUID的重定向。然后你知道如何访问你想要的数据。设置一个无论你想要在对象上的一段时间。

它仍然是kludgy。但它有效,并且不会在查询字符串中公开所有内容,而且应用程序中的其他内容不会查找特定的会话密钥名称。他们必须枚举会话变量才能获得它。