【问题标题】:Passing values between two "totally different" pages在两个“完全不同”的页面之间传递值
【发布时间】:2010-10-06 18:32:22
【问题描述】:

需要明确的是,这两个页面仅在逻辑上相关,换句话说,我的 FirstPage.Aspx 中的值将值传递给我的 SecondPage.Aspx,因此它控制我的 SecondPage.Aspx 中的控件的组件和某些属性,即 SecondPage。 Aspx 不是来自 FirstPage.Asp 的重定向或传输。抱歉,我厌倦了阅读所有答案,但我真正需要的答案!

假设 firstPage 包含一个 textBox,它从用户或网络管理员那里获取一个值,以设置他对 SecondPage 上 gridView 页面大小或 SecondPage 上标签的 Text 属性的偏好

我想探索我这样做的选择

PS:有人告诉我使用数据库存储第一页中的值,然后在带有我的标签的页面上,例如我连接到数据库并检索值并将其设置为标签...这是最好的吗练习让页面在每次加载时都连接以设置一些值,有时它只是一个像 5 这样的 int,而且大多数时候我已经连接到数据库以在 gridView 或任何数据绑定控件中显示某些表的数据!

编辑:

对不起,如果我有点粗鲁,我只是得到了与我读到的相同的答案,这完全不是我的情况!..当然感谢你们中的一些人提到了数据库解决方案,我希望我能为我的特定案例提供示例或文章,因为我认为即使它很简单,但它却很重要......

【问题讨论】:

  • 所以你说你已经阅读了很多文章并找到了很多相同的答案来回答你的问题,但现在你在这里问是因为你不喜欢 i> 你找到的答案是什么?听起来您可能应该接受人们推荐的解决方案可能是正确的!我认为推荐它是有原因的...... ;-)
  • 当然不是!值在 2 个页面之间传递的所有答案的情况,其中一个是对另一个页面的反应(响应,重定向),一个母版页和它的页面!我的案例是两个不同的页面,它们没有连接,它们不会相互指向,我只想将其中一个的值设置为另一个页面上的控件,并且确信有一种方法不是菜鸟!听了很多人的意见后,数据库是我的解决方案,但仍然没有示例显示应用此方法的最佳实践,我可以连接到数据库和所有东西,我只想要一个准确的示例!
  • 我已在下面回复,但忘记提及另一个选项。如果它符合您的需要,您甚至可以将持久上下文存储在静态变量中。只要应用程序状态存在,它们就会一直存在。静态变量可以是字典或其他任何东西。但是您需要担心它的生命周期,以免无限期地占用资源。
  • 我认为数据库对我的案例来说非常方便,每个人都提到了它,所以我认为它对我的应用程序来说是最好的!..但也许它就这么简单明了(创建一个表来存储所有控件,管理员存储属性值,然后由控件检索)我只是担心连接到的数据库压力太大每次页面加载时都会检查管理员设置的最新值,但是干草!他们是经验:D

标签: c# asp.net


【解决方案1】:

ASP.NET 框架提供了多种机制来维护跨多个 HTTP 请求的上下文。您希望通过调用访问的数据可以存储在此上下文中。您所要做的就是决定您希望此上下文维护多长时间(因为它会消耗资源),以及您是否希望此上下文在多个服务器上可用。

  1. Application State :在应用程序的生命周期内维护,即从应用程序第一次被 ASP.NET 加载,直到它因任何原因被卸载。
  2. Session State:ASP.NET 能够将来自特定客户端(IP 地址)的一系列 HTTP 请求识别为会话,这些请求在时间上彼此接近。它可以创建一个在此类会话中持续存在的会话上下文,您可以在其中存储会话中的调用可访问的数据。会话状态可以通过across server boundaries 与数据库或共享内存相关联来提供。
  3. 数据库
  4. Viewstate :您可以使用 Viewstate 来维护上下文,但请记住,对于每个请求/响应,Viewstate 都会通过网络传输。众所周知,它会变得相当大,特别是如果您使用控件。
  5. Cookies :同样,为每个请求/响应在线传输。

【讨论】:

  • IMO,这不是应用程序状态或视图状态的有效使用。
  • 尽管这不是我真正想要的,但你几乎解释了我所有的选择,但我很糟糕,我一直在为我的案例寻找完美的答案,并没有注意你的答案。 ..也许它不适合解决我的问题,但我认为这是最好的..作为所有想要开始这部分并且不知道选项的人的参考谢谢+1
【解决方案2】:

你可以使用:

  • 会话变量
  • 饼干
  • 数据库值

每个人都有自己的优点和缺点

如果您希望在下次访问第 2 页时存储该值,请使用数据库值。如果没有,请使用会话变量。

数据库值会给你一个持久值,然后你可以在那里存储其他这样的用户变量。

会话将提供持久数据,但仅限于浏览器当前会话。如果他们的会话超时,数据将会丢失。

根据你所说的,我会假设一个数据库值。

【讨论】:

  • 我不确定,但如果这些是我唯一的选择,我认为数据库解决方案是有道理的,但为什么没有关于此类事情的示例、文章或任何参考,我的意思是几乎所有动态网站需要一个页面(管理页面)来控制网站资源并更新其他页面上的数据!
  • @IKashef。几乎每个动态网站都使用数据库来做到这一点。还有 TONS 示例说明如何从 ASP.NET 连接到数据库!
  • 是的,我终于放弃了,我已经用一个来存储数据、文章、用户。但我不知道这可能是存储我的控件设置以动态更改它们的正确方法,我不是那个菜鸟!我已经连接到数据库了:S 刚刚在最佳实践之后这样做....请您再次阅读我的问题中的 PS,也许它可以帮助您更多地了解我的情况!
【解决方案3】:

你可以使用 cookie、会话等,但如果你想传递定义页面全部内容的东西,比如某种 ID,你可能只想把它放在 QueryString 中。 (例如:default.aspx?id=4)

缺点:每个人都可以读取(或更改)值,不能用于关键数据

优点:每个人都可以读取值,并且可以将链接发送给其他人

【讨论】:

  • 我更喜欢这个,只要发送的数据是定义其他页面显示的内容(如实体的数据库 ID),但如果它定义诸如“有多宽是网格”或“树是否展开”。但是,您可以在查询字符串中使用锚点来执行此操作(锚点是 URL 中“#”之后的内容)
  • 就这么简单,请记住!..它们是两个不同的页面,没有重定向或任何东西..例如:PageOne 有一个标签,PageAdmin 有一个文本框和一个按钮......我希望当管理员单击按钮时单击事件的事件处理程序将文本框的值设置为另一页上标签的文本属性......我不认为 QueryString 是这里的答案!。 .it 可能是数据库,但仍然如此!怎么=)!?每次PageOne加载时我都会连接到数据库以检查数据库中的最新值并将其设置为标签或什么!看起来很消耗,不是吗?
  • 好吧,我想我现在可能理解得更好了。你是说它是“实时”发生的。即,管理员已打开,文本框已更改。用户还打开了 Default.aspx 并且标签立即更改?
  • 我认为你说得对,如果你所说的实时是指运行时间,那肯定是!
  • 我只是想知道,如果你对我来说更清楚之后有不同的答案,或者你没有任何更新!
【解决方案4】:

我建议你从这里开始:Get Started with ASP.NET

如果我理解你的问题,你正在寻找Cross Page Posting。如果一个页面没有发布到第二个页面,您需要以某种方式保存数据(数据库、会话、xml 文件等)。但是,通过阅读您的问题,您听起来好像只想跨页发布...

【讨论】:

  • 其实这不是它听起来的样子,第一页不会直接发布到另一个页面,例如你有一个带有文本框的管理面板,你想控制另一个页面的标签控件..它不会这样做,因为在网络管理员更改值之后,它会重定向到第二个页面以进行此更改,而是应该获取该值并将其传递到另一个页面,这是我的问题,而不是重定向到它或我认为我可能需要使用数据库永久存储管理员首选项的任何内容,直到他决定再次更改它们,但我需要有关如何做到这一点的示例
  • 那么您将需要持久性部分。 DB、XML、平面文件等
  • 查看上面的链接以了解如何开始。它深入到持久化到数据库
  • "大多数时候我已经连接到数据库以在 gridView 或任何数据绑定控件中显示某些表的数据!"这听起来像我需要阅读吗!....我对数据库和连接以及命令和所有东西都很好!...我只是想要一个很好的例子来精确管理页面和一个 Default.aspx...管理员从页面中的文本框中获取一个值并将 Default.aspx 上的标签设置为它!
  • 听起来不要那么自卫。试图提供帮助。所有的管理页面都是一个将数据保存到数据库的表单。文本框写入,标签读取。
【解决方案5】:

您的问题非常令人困惑,我花了很多时间才明白您真正需要什么。由于 HTML 中没有事件,因此您需要使用 JavaScript 和某种网络服务 (AJAX)。

页面 A 将值存储在数据库中,页面 B 上的 JavaScript 将不断检查数据库中的新值,获取它们并输出给用户。为此,它需要连接到一些网络服务/网络方法,这些网络服务/网络方法会将值从数据库返回到您的页面。一个很好的例子可以找到here

或者,您可以使用每 5 秒刷新一次页面

<meta HTTP-EQUIV="Refresh" content="5">

并检查Page_Load 服务器事件上的新数据库值。

【讨论】:

  • 对不起!但是做 javaScript 事情会让它像 facebook 即时通知模块一样,对吗?顺便说一句,我认为我不需要那个!当页面加载时,我只需要检查一次数据库中的值!我只是想保存控件的属性,例如使用 ControlState 而不是将值存储在数据库中!
  • 如果您希望用户存储他的偏好,最好使用会话或 cookie,如果您希望管理员为每个人或特定用户设置它们,那么您必须使用数据库。
【解决方案6】:

我认为更好的答案是“控制状态”

参考:http://www.asp.net/general/videos/how-do-i-use-control-state-to-persist-information-for-a-custom-web-server-control

但我无法在我的案例中实现此功能,两个不同的页面 例如:Web 用户控件放置在 News.aspx 上,而具有要分配给 News.aspx 上的控件的值的文本框放置在 myAdmin.aspx 页面中!

老实说,我不太了解代码

所以!你认为这是最好的解决方案吗?如果是,您认为它可以用于我的案例(两个不同的页面)吗??

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2016-04-29
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    相关资源
    最近更新 更多