在跨页面发布后从内容页面获取隐藏的字段值

时间:2012-05-16 08:54:36

标签: asp.net hidden-field

我有以下情况:

Page1.aspx基于母版页,其中包含一个名为“hdFlotaID”的隐藏字段。在同一页面上,我有一个按钮,我设置了PostBackUrl="Page2.aspx"。当我点击按钮时,会加载Page2,但是我无法获得隐藏的字段。我试过两个(正如我在msdn或其他帖子上看到的那样):

this.PreviousPage.Controls[0].FindControl("hdFlotaID")

this.PreviousPage.FindControl("hdFlotaID")

但它们返回null。

This.PreviousPage会返回一个值,但该值的Controls[0]似乎会返回母版页,我想要内容页。

我也检查过隐藏字段有runat服务器值,ClientID模式设置为static(我甚至检查了生成的HTML并且ID是正确的)

你能帮帮我吧!谢谢

解决方案:好的,所以根据你的帮助我让它像这样工作

this.PreviousPage.Controls[0].FindControl("CPH").FindControl("hdFlotaID")

其中CPH是母版页中ContentPlaceHolder的ID。

此外,具有公共属性的ideea非常好,尽管在我的情况下添加PreviousPageType指令给了我一些关于命名空间的错误。如果我删除了该指令并将其转换为代码隐藏,它可以正常工作。

非常感谢你

2 个答案:

答案 0 :(得分:1)

FindControl只搜索一个级别,即顶级容器,而内容页面的所有控件都不直接在主控件集合中,而是在主控内容控件集合中。

实现这个目标

1)您需要编写FindControl的递归版本。尝试这样(没有测试过):

((Page1)this.PreviousPage).FindControl("hdFlotaID")

2)将上一页的类型转换为它所在的页面类型。然后你可以访问控件。

答案 1 :(得分:0)

在page1.aspx中设置一个属性,该属性使用this.Page.MasterPage.FindControl("hdFlotaID")返回隐藏字段的值。在Page2.aspx中,在ASPX文件中添加"PreviousPageType"标记。这样,您可以以类型安全的方式访问previos页面属性,例如this.PreviousPage.hdFlotaID_property