我有以下情况:
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指令给了我一些关于命名空间的错误。如果我删除了该指令并将其转换为代码隐藏,它可以正常工作。
非常感谢你
答案 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