Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据从一个ASP.NET页面传递到另一个ASP.NET页面_Asp.net_Global Variables - Fatal编程技术网

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

将数据从一个ASP.NET页面传递到另一个ASP.NET页面,asp.net,global-variables,Asp.net,Global Variables,好的,这是web开发中非常常见的场景,有一个非常常见的解决方案。所以我要寻找的是其他的解决方案 我在PageA中有一些数据,我正在重定向到PageB,它需要这些信息。我也许可以将它存储在查询字符串中,但让我们假装它太复杂,或者我只是不想将它存储在查询字符串中 所以我把它放在会议上。然后当我到达PageB时,我就把它从会话中取出来了。这就是我们一直在做的 问题是,会话是一包全局变量。由于教科书上所有的原因,全局变量都是不好的。我们将在应用程序的其他部分检查该变量,并根据其值执行一些操作。然后我们想

好的,这是web开发中非常常见的场景,有一个非常常见的解决方案。所以我要寻找的是其他的解决方案

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

所以我把它放在会议上。然后当我到达PageB时,我就把它从会话中取出来了。这就是我们一直在做的

问题是,会话是一包全局变量。由于教科书上所有的原因,全局变量都是不好的。我们将在应用程序的其他部分检查该变量,并根据其值执行一些操作。然后我们想要改变它,所以我们必须找出它被设置在哪里,只是它被设置在了任何地方。现在,我们需要深入了解用户是如何到达PageZ的,以了解是谁和什么设置了该变量

因此,如果我真的讨厌全局变量和意大利面代码,还有其他方法吗?

使用

 Page.PreviousPage
(获取将控件转移到当前页的页。)

在某些情况下,你可能会 要将一页发布到另一页。 例如,您可能正在创建一个 收集数据的多页表单 每页上有不同的信息。在里面 在这种情况下,您可以配置某些 控件(实现 IButtonControl接口,例如 要发布到的页面上的按钮控件) 另一个目标页面。这是 称为。 跨页面发布提供了一些 与使用转移相比的优势 方法重定向到另一页

假设您从PageA跳到了_PageB:

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

        //............... etc
使用

 Page.PreviousPage
(获取将控件转移到当前页的页。)

在某些情况下,你可能会 要将一页发布到另一页。 例如,您可能正在创建一个 收集数据的多页表单 每页上有不同的信息。在里面 在这种情况下,您可以配置某些 控件(实现 IButtonControl接口,例如 要发布到的页面上的按钮控件) 另一个目标页面。这是 称为。 跨页面发布提供了一些 与使用转移相比的优势 方法重定向到另一页

假设您从PageA跳到了_PageB:

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

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

我不知道为什么您需要知道是谁和什么设置了变量才能使用它。但是如果我理解正确,您可能不喜欢使用Session[]需要依赖的神奇字符串。在这种情况下,为什么不将会话对象包装到helper类中呢?可能是这样的:

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”更改为您想要的任何内容,并且不破坏任何代码。

我不确定您为什么需要知道谁和什么设置了变量才能使用它。但是如果我理解正确,您可能不喜欢使用Session[]需要依赖的神奇字符串。在这种情况下,为什么不将会话对象包装到helper类中呢?可能是这样的:

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。然后您就知道如何访问您想要的数据。将对象的生存期设置为所需的长度


它仍然是乱七八糟的。但它可以工作,并且不会在查询字符串中公开所有内容,另外,应用程序中的其他内容也不会查找特定的会话密钥名称。他们必须枚举会话变量才能得到它。

最简单的解决方案,我认为(仍然使用会话):创建一个拥有您想要的一切的对象。将该对象存储在会话中,名称为GUID(不可重用)。执行重定向,只在查询字符串上传递一个GUID。然后您就知道如何访问您想要的数据。将对象的生存期设置为所需的长度


它仍然是乱七八糟的。但它可以工作,并且不会在查询字符串中公开所有内容,另外,应用程序中的其他内容也不会查找特定的会话密钥名称。他们必须枚举会话变量才能得到它。

或Cookie,或将其写入数据库。亲爱的,你是否尝试过form post或CrossPage post?在普通类中维护会话变量也是一个很好的实践。是的,我们现在正在研究跨页回发。我喜欢这个想法,因为它减少了全局变量效应。我只是希望我能先在pageA上处理一些代码。或者一个Cookie,或者把它写进数据库。亲爱的,你试过把form post或CrossPage post写回去吗?在普通类中维护会话变量也是一个很好的实践。是的,我们现在正在研究跨页回发。我喜欢这个想法,因为它减少了全局变量效应。我只是希望我能先处理pageA上的一些代码。如果你这样做了,你可以给你的值一个默认值——以防用户还没有设置它。我还建议只在战略时刻设置会话变量,如登录或用户进入站点的某个部分时。实际上我们已经这样做了。我们有一个SessionManager对象,因此可以使用强类型变量。我们需要知道如何设置变量的原因是当我们不可避免地对代码进行更改时。我们将重构或更改业务逻辑,在不知道全局变量在哪里使用的情况下,我们可能会破坏一些东西。因此,全局变量==bad。如果你这样做,你可以给你的值一个默认值——以防用户还没有设置它。我还建议只在战略时刻设置会话变量,如登录或用户进入站点的某个部分时。实际上我们已经这样做了。我们有