0

アコーディオン パネル内にあるテキスト ボックスの内容を取得できません。私のマークアップは次のとおりです。

<juice:Accordion ID="Accordion1" runat="server">

<juice:AccordionPanel ID="AccordionPanel1" runat="server" Title="Media ID">
<PanelContent>
  <asp:Label ID="LabelMediaID" runat="server" Text="Media ID"     AssociatedControlID="TextBoxMediaID"></asp:Label>    
  <asp:TextBox ID="TextBoxMediaID" runat="server"></asp:TextBox>
</PanelContent>
</juice:AccordionPanel>

ユーザーがボタンをクリックすると、サーバー側のコードがトリガーされます。

protected void ButtonSearch_Click(object sender, EventArgs e)
{
    // Retrieve controls within accordion panels
    TextBox TextBoxMediaID = (TextBox)AccordionPanel1.FindControl("TextBoxMediaID");
    string mediaID= "abc";
    if (TextBoxMediaID != null)
        mediaID= TextBoxMediaID.Text;

テキスト ボックス コントロールを正常に取得できますが、その Text プロパティにアクセスしようとすると、常に空になります。

誰かが私を助けることができますか?残念ながら、私は ASP.NET や Juice などの世界にかなり慣れていません。ありがとうございます。

4

2 に答える 2

1

私の問題は、マスターページを使用するASP.NETプロジェクトがあることが原因であることが判明しました。

マスターページを使用していない場合は、

TextBox TextBox1 = (TextBox)AccordionPanel1.FindControl("TextBox1");
string content= Request.Form[TextBox1.UniqueId];

完璧に動作します。ただし、ContentPlaceHolderでマスターページを使用する場合は、次のコードを使用します。

ContentPlaceHolder cph = (ContentPlaceHolder)Master.FindControl("MainContent");
TextBox TextBox1 = (TextBox)AccordionPanel1.FindControl("TextBox1");
string content= Request.Form[cph.UniqueID + "$" + TextBox1.UniqueId];

うまくいけば、これは誰かに多くの時間を節約するでしょう!

于 2013-01-07T17:29:43.957 に答える
0

オプション 1 - クイック フィックス

ページの場合ClientIDMode="static"、ページ ディレクティブを作成し、それを使用Request.Form["TextBoxMediaID"]してテキスト ボックスの値を取得します。

オプション 2 - デバッグ

サーバー側のコントロールの数がわからないため、デバッグ モードに移動してAccordionPanel1.Controls[0].("TextBoxMediaID");or を試してください。AccordionPanel1.Controls[0].Controls[0].("TextBoxMediaID");簡単な解決策は、検索コントロールの再帰関数を使用することです。

于 2012-12-11T12:13:10.667 に答える