我正在编写我的第一个 asp.net应用程序,并尝试使用PreviousPage属性来访问页面之间的数据。 Visual 2010给了我一个我不理解的错误,所以我需要一些帮助才能理解我做错了什么。
我有一个应用程序,我将使用Transfer在所有页面之间跳转。这样,从用户的角度来看,他看到的只有一个网址。这个url将使他登录到应用程序(现在是一个应用程序控制的函数)并连接到数据库。因此,我有一个sqlclient.sqlconnection对象,我希望将其移交给名为_dbConnection的下一页,这是我声明的页面类中的私有变量...
Partial Class Protocol
Inherits System.Web.UI.Page
Private _dbconnection As SqlClient.SqlConnection
Public ReadOnly Property dbConnection As SqlClient.SqlConnection
Get
Return _dbConnection
End Get
End Property
...
稍后下载代码,响应按钮上的点击事件
Server.Transfer("PSetup.aspx")
在PSetup.aspx中我有以下
<%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="True" CodeFile="PSetup.aspx.vb" Inherits="PSetup" %>
<%@ PreviousPageType VirtualPath="~/Protocol.aspx" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
哪个应该将Protocol类声明为上一页
但是在PSetup的Page_Load Sub中我尝试了这个
_dbConnection = PreviousPage.dbConnection
在这里使用_dbConnection是新页面类中的私有变量。
Visual Studio给我一个错误'dbConnection'不是'System.Web.UI.Page'的成员
我已经多次阅读了有关这方面的文档,我只是不明白我做错了什么。请有人帮帮我。
答案 0 :(得分:0)
尝试将dbConnection变量设为Shared
Partial Class Protocol
Inherits System.Web.UI.Page
Private Shared _dbconnection As SqlClient.SqlConnection
Public Shared ReadOnly Property dbConnection As SqlClient.SqlConnection
Get
Return _dbConnection
End Get
End Property
但是我不确定在页面之间传递数据是否是一种很好的做法
答案 1 :(得分:0)
我想你需要了解的第一件事是ASP.NET是无状态的。这意味着页面之间没有“保存”数据。 PreviousPage
属性的作用是允许通过使用Transfer
方法保持请求信息,请求信息将是GET或POST变量。
恕我直言,做你想做的最好的方法是拥有一个与这两个页面无关的共享公共类,并拥有获取SqlConnection
的公共函数。但请记住,它是无状态的,因此您每次都必须创建连接。
另一种方法是在会话中保存dbConnection(我不建议这样做,因为可以查看会话信息)。
否则,您不能在页面之间保留包含信息的变量。这就是无国籍的意义。
另外,对于PreviousPage
,请记住它正在创建System.Web.UI.Page
的实例,而不是Protocol
的实例。这意味着Protocol
不会存在公共属性,只有Page
的原生功能才会存在。
修改
来自msdn
请注意
源页面上主要用于公开跨页面发布值的属性通常是只读属性。虽然源页面可以包含公共读/写属性,但是从目标页面属性设置源页面属性通常没有用处,因为该值不会被保留。