0

私は次の状況にあります:

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モードが静的に設定されていることも確認しました(生成されたHTMLを確認し、IDが正しいことも確認しました)

手伝ってくれませんか!ありがとうございました

解決策:わかりました。あなたの助けに基づいて、私はそれをこのように機能させることができました

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

ここで、CPHはマスターページからのContentPlaceHolderのIDです。

また、パブリックプロパティを持つアイデアは非常に優れていますが、私の場合、PreviousPageTypeディレクティブを追加すると、名前空間に関するエラーが発生しました。ディレクティブを削除してコードビハインドでキャストすると、正常に機能します。

どうもありがとうございました

4

2 に答える 2

1

FindControlは、1つのレベル、つまり最上位のコンテナのみを検索します。コンテンツページのすべてのコントロールは、マスターコントロールコレクション内ではなく、マスターのコンテンツコントロールコレクション内に直接あります。

これを達成するには

1)FindControlの再帰バージョンを作成する必要があります。このようにしてみてください(テストしていません):

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

また

2)前のページを現在のページのタイプに型キャストします。次に、コントロールにアクセスできます。

于 2012-05-16T09:08:05.113 に答える
0

を使用して非表示フィールドの値を返すプロパティをpage1.aspxに設定しますthis.Page.MasterPage.FindControl("hdFlotaID")。Page2.aspxで、"PreviousPageType"ASPXファイルにタグを追加します。このようにして、タイプセーフな方法で以前のページのプロパティにアクセスできます。this.PreviousPage.hdFlotaID_property

于 2012-05-16T09:07:01.833 に答える