0

マスターページに、IDが「txtMasterTextBox」のasp:TextBoxがあります。このページ内のIDが「childTextBox」テキストの別のtextBoxが変更されたときに、このテキストボックスの「Text」プロパティを子ページから変更したいと思います。childTextBox_TextChanged()で私は持っています

TextBox tbTest = (TextBox)this.Master.FindControl("txtMasterTextBox");
tbTest.Text = childTextBox.Text;

テキストビジュアライザーを使用すると、lbTest.Textが正常に変更されたことがわかりますが、マスターページの実際のtextBoxでは何も変更されていません。何が起こっている?

4

2 に答える 2

2
you have to do this

In master page.

    Master:  <asp:TextBox ID="txtMasterTextBox" runat="server"></asp:TextBox>
In Child Page.

 child:  <asp:TextBox ID="childtxt" runat="server" ontextchanged="childtxt_TextChanged" **AutoPostBack="true"**></asp:TextBox>

than in Textchange event of child textbox 
 protected void childtxt_TextChanged(object sender, EventArgs e)
        {
            TextBox tbTest = (TextBox)this.Master.FindControl("txtMasterTextBox");
            tbTest.Text = childtxt.Text;

        }

**so basiclly u have to put one attribute "AutoPostback" to True**
于 2013-02-01T09:14:09.943 に答える
2

のアクセサーとしてマスターにパブリック プロパティを提供する必要がありますTextBoxMaster次に、それに応じてページのプロパティをキャストするだけです。

あなたのマスターで:

public TextBox MasterTextBox { 
    get {
        return txtMasterTextBox;
    } 
}

子ページで(マスターのタイプが であると仮定してMyMaster):

((MyMaster) this.Master).MasterTextBox.Text = childTextBox.Text;

ただし、これはあなたのFindControlアプローチよりもクリーンな方法であるためTextBox、変更されたテキストが表示されない理由がわかりません。多分それDataBindはポストバックの問題です。

さらに良い方法は、プロパティでコントロールを公開するのではなく、それだけを公開することTextです。次に、基になる型を簡単に変更できます。TextBoxタイプをからに変更することを検討してくださいLabel。すべてのコンテンツ ページを で変更するFindControl必要があります。コンパイラの警告は表示されませんが、実行時例外が発生します。プロパティのアプローチでは、コンパイル時のチェックがあります。基になるコントロールの を取得/設定するだけのプロパティに変更した場合でもText、コンテンツ ページの 1 つをまったく変更せずに変更できます。

例えば:

public String MasterTextBoxText { 
    get {
        return txtMasterTextBox.Text;
    }
    set {
        txtMasterTextBox.Text = value;
    }
}

およびコンテンツページで:

((MyMaster) this.Master).MasterTextBoxText = childTextBox.Text;
于 2013-02-01T08:58:10.277 に答える