7

これらの2つのシナリオには違いがありますか?

(1)通常の子供からマスターページのプロパティにアクセスする

(2)ネストされたマスターページからマスターページのプロパティにアクセスする

次のようなコンテンツページからマスターページのテキストボックスにアクセスしようとしました。

TextBox a;
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive
defaultTextbox.Text = a.Text; // defaultTextBox is a textbox control inside default.aspx

動作しますが、ネストされたマスターページに同じメソッドを適用すると、次のようになります。

TextBox a;
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive
myTextBox.Text = a.Text; // myTextBox is a textbox control inside child.master

これは機能しません、私は何かが欠けていますか?私はregularepage_loadハンドラー内で両方のコードを呼び出します...

また、コードビハインドからネストされたマスターページ内にテキストボックスの値を設定できないことに気付きました。間違いなく何かが足りないのですが、それは何ですか?この問題に光を当てるために、ここに例があります:

ネストされたマスターページ:

<%@ Master Language="C#" MasterPageFile="MasterPage.master" AutoEventWireup="false" CodeFile="MasterPage2.master.cs" Inherits="MasterPage2" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<asp:textbox id="tx2" runat="server" text="this is two"></asp:textbox>
<asp:contentplaceholder id="newstuff" runat="server"></asp:contentplaceholder>
</asp:Content>

背後にあるコード:

Response.Wrote(tx2.Text);

私は何も得られません、なぜ私は何を逃したのですか?再帰的な検索コントロールも試したことに注意してください。

String str = ((TextBox)((Content)FindControl("Content2")).FindControl("tx2")).Text;

まだ何もありません

4

4 に答える 4

5
ContentPlaceHolder cp = (ContentPlaceHolder)this.Master.Master.FindControl("ContentPlaceHolder1");
  //base content place holder id

Label objLabel3 = (Label)cp.FindControl("lblNested");
  //lblNested is id in nested master page
于 2012-06-15T06:16:51.040 に答える
4

http://www.odetocode.com/Articles/450.aspxでいくつか読んだ ところ、真ん中のネストされたページがPage_Loadを呼び出さないことがわかりました。代わりに、任意のフィールドを設定するためにキャッチできるloadイベントを発生させるので、答えは次のようになります。ネストされたページで次のようにします。

protected override void OnLoad(EventArgs e)
    {
        myTextBox.Text = "anything";
        base.OnLoad(e);
    }
于 2009-05-18T05:32:53.257 に答える
2

これは問題なく機能するはずなので、他の何かが間違っている必要があります。単純なテストプロジェクト内で試してみましたが、どちらの場合もマスターページでコントロールを見つけるのに問題はありません。

ネストされたマスターページ内の正しいマスターページを参照しているかどうかを(もう一度)確認します。Masterネストされたマスターページ内のプロパティのランタイムタイプも確認できます。マスターページのタイプである必要があります。

編集:問題は、ネストされたマスターページからルートマスターページでコントロールを見つけることであり、これは問題なく機能するはずだと思いました。ネストされたマスターページのコンテンツプレースホルダー内のコントロールを見つけるには、次のフォーラム投稿を参照してください。

于 2009-05-17T11:59:18.197 に答える
0

ディレクティブを使用して、コンテンツページからマスターページとネストされたページの両方でコンテンツを完全に制御できます。

<%@ MasterType VirtualPath="your_master.master" %>
<%@ Reference VirtualPath="~/your_master.master" %>

OdeToCodeのK.ScottAllenの優れた記事を参照してください

于 2015-05-06T04:10:35.483 に答える