使用VB将值从一个页面传递到另一个页面ASP.net



我只需要将文本框输入数据复制到另一个页面。当我从Home.aspx中选择数据时,我有一个datagridview。它会在文本框中显示行数据。现在我想将数据复制/传递到另一个页面。我该怎么做?我尝试了以下代码,但它不起作用。

这是装载页面上的第2页代码

If Not Page.PreviousPage Is Nothing Then
Dim SourceTextBox As TextBox
SourceTextBox = CType(PreviousPage.FindControl("TextBox1"), _
TextBox)
If Not SourceTextBox Is Nothing Then
Label1.Text = SourceTextBox.Text
End If
End If

好的,这里有很多问题。

首先:page.previouspage仅在您使用时可用

Server.Transfer("~/MyCoolWebPage.aspx")

一般来说;服务器端";通过这种方式转移/跳转/跳转到页面。试图保持这篇文章的简短,但一个服务器。Transfer()意味着没有真正的浏览器端跳转到页面,只有服务器端的传输。这意味着以前的URL甚至没有改变!因此,作为一般规则,从页面上的按钮点击跳到页面,该按钮点击可以是客户端(JavaScript)点击,也可以是执行响应的标准按钮点击。重定向()。然而,在这两种情况下,它实际上都是客户端浏览器请求。因此,一般来说,你不想构建或编写一个";假定";即服务器。Transfer()就是您登录该页面的方式。

因为以上原因?嗯,我。Page.PreviousPage只有在您登录的页面是100%服务器端重定向到新页面的结果时才可用。但事实并非如此,因此对于你的绝大多数网页来说,那就是页面。Previouspage将为null,并且对您使用ZERO。(它根本不可用)。

因此,现在我们回到传统的手段和方法;转移";数据转移到下一页。

请记住,该页面是无状态的。这意味着EVEN在同一页面上,所有值和变量在每次页面加载之间都会丢失。即使是简单的按钮点击也意味着页面将被重新加载,但重新加载会丢失所有值。现在,大多数控件,如文本框,甚至网格视图,都可以并将为这些"控件"保留所谓的状态;往返行程";当你点击某个按钮时。

现在,在您的情况下,毫无疑问,您正在点击一个按钮,并跳转/加载到一个新的网页。因此,所有以前的控件、数据和您在前一页上存在的一切都不见了,都丢失了。

因此,如何传递值给出了";无状态‘网页的本质?

嗯,一种非常常见的方法是在URL中使用参数。然而,我发现它们相当丑陋,用户也可以破坏这些价值观。然而,对于真正的大型网站,我们看到URL中经常使用的部分,这是因为网站不想花费精力、时间,甚至内存和资源来跟踪访问该网站的100万用户。

但是,还有另一种非常常见的方式";保存";我们称之为往返的价值观。那个得心应手的花花公子;temp";存储系统称为Session()。现在,Session()应该被视为一种宝贵而有限的资源,但它在很大程度上是您可以(也应该)传递值的方式。这些价值观的美妙之处在于;持久性";并保持他们的价值观。这包括跳转到另一个页面。

那么,将数据传递到下一页?

只需将该数据行填充到会话中,然后在目标页面中,您就可以从这一行数据中获取/grap/use/pull任何值。

所以就在你回应之前。重定向("到我的第二页"),你可以这样做:

Session("MyTextBox") = me.TextBox1.Text

现在,对于一个文本框值,上面的内容就可以了。但是,你想通过整排。

所以,你可以去:会话("MyListDataRow")=MyRowOfData

现在,您不解释如何、何时、何地选择一行数据。但您当然可以将一行数据推入会话,然后在下一页上显示。

再来一个超级DUPER WHOPPER:如果您确实将所选行拉入数据行(与数据表或数据集相反),请记住.net序列化程序不支持数据行(为什么,我不知道!!)。因此,如果您使用";在存储器中";sessions(),那么你就可以了。但如果你决定采用基于SQL的session()管理,那么代码就会开始失败。因此,要么插入ListViewDataItem,要么插入数据表来传递该行数据,而不是数据行。

因此,我不会通过";数据行";在Session()中,并避免上述令人震惊的消息,即.net遗漏了数据行不支持序列化!(天哪!!!)。

因此,除非使用server.transfer(),否则page.previous无效,也不可用。如果你使用母版页,那么你必须首先挖掘并获得母版页引用,然后是ContentPlaceHolder,如果你使用的是服务器传输,因此你确实使用了页面。上一页。

编辑:以上都说了吗?好吧,如果你在列表视图(或数据网格)行上有一个点击事件,那么server.transfer实际上是";一个";在那些很好的用例中,您可以考虑使用server.transfer(),因为您可以通过使用page充分使用第二页中的listview/datagrid数据。上一页。只要注意,如果你使用母版页,你必须再往下拉一层才能看到内容。

最新更新