0

我想使用保存在另一页上的一个页面中的视图状态变量的值。但是在这样做的同时,它会显示 NullReferenceException。我是 ASP.net 的新手。请帮帮我。

在 register.aspx 中

ViewState("name")=textbox1.text

在成功.aspx

dim a as string

a=ViewState("name").toString

4

4 回答 4

0

使用 Session["name"] = textbox1.text...

如果我没记错的话,你没有直接控制或应该直接控制视图状态。

于 2014-01-01T11:41:57.837 回答
0

ViewState是跨回发保持状态的技术,当您加载另一个页面时会丢失。因此,您将需要使用另一种方式将数据发送到下一页。在MSDN上阅读更多信息

跨页面发送数据的常见选择包括:

  1. 请求参数
  2. 通过设置上一页属性
  3. 会话变量
于 2014-01-01T11:49:44.340 回答
0

ViewState 仅限于一个页面,因此不能在另一个页面上使用。原因是 ViewState 在页面输出中的隐藏字段中被序列化,该隐藏字段被传输到客户端并在回发时返回到服务器。
如果您想将数据传输到其他页面,您还有其他几种选择:

  • 正如@AnastacioGianareas 还指出的那样,会话内存就是其中之一。它位于服务器上,但会话将在用户不活动一段时间后过期。它位于服务器上,如果您在会话中分配了许多用户和大量内存,它会降低应用程序的可伸缩性。
  • 将数据作为查询字符串参数移交给其他页面,例如重定向到“Success.aspx?name=”。这适用于您可以放入查询字符串的少量数据(例如 id 或名称)。重要的是,客户端也可以使用该查询字符串参数请求 Success.aspx,因此应为非关键数据保留它并仔细验证。
  • 使用 cookie 将其传输到客户端并再次返回。

链接很好地概述了替代方案。

于 2014-01-01T11:53:16.600 回答
0

来自MSDN

视图状态是 ASP.NET 页面框架默认使用的方法,用于在往返之间保留页面和控件值。当页面的 HTML 被渲染时,页面的当前状态和回发期间需要保留的值被序列化为 base64 编码的字符串,并在视图状态隐藏字段中输出。

在页面之间持久化数据的选项各不相同,取决​​于您的要求,MSDN 上的这个页面描述了这些选项中的每一个以及您应该考虑的事项。

对于您的要求,QueryStrings、SessionState 似乎是最好的解决方案。

作为旁注,请始终验证您的“状态”变量(无论您选择哪种方法)以确保它们不为空并且是预期的类型。即所有这些值都将存储为字符串,如果您打算将变量用作另一种类型(int、double 等),您应该确保这是有效的。此外,如果您沿着查询字符串路线走,请考虑任何安全注意事项,因为用户可能/将修改这些值。

于 2014-01-01T11:55:22.730 回答