2017-06-27 18 views
0

名前付けコンテナのfindControlメソッドに関する問題があります。 これは最初の問題ではなく、私は理論を理解したいと思います。 ウェブサイト上に多くのソリューションが見つかりましたが、何も動作しません。名前付けコンテナのfindControl(Asp.net webform C#)

私はコントロールを含むDetailsViewを持っています。 私はDEFAULTMODE「挿入」を入れて、私は2つのラジオボタン

<asp:DetailsView ID="DetailsView1" runat="server" 
     ItemType="[...]" 
     DefaultMode="Insert" 
     [...]"> 
     <Fields> 
      <asp:TemplateField> 
       <InsertItemTemplate> 
        <asp:Panel ID="Panel1" runat="server" GroupingText="Create or Select"> 
         <div class="Select"> 
          <asp:RadioButton ID="RB_Select" runat="server" Text="Select" Checked="True" AutoPostBack="true" OnCheckedChanged ="RB_Select_CheckedChanged" /> 
          <asp:DropDownList runat="server" ID="DDL_Select" 
           ItemType="[...]" 
           [...] 
           AutoPostBack="true"> 
          </asp:DropDownList> 
         </div> 
         <div class="New"> 
          <asp:RadioButton ID="RB_New" runat="server" Text="New" Checked="false" AutoPostBack="true" OnCheckedChanged="RB_New_CheckedChanged" /> 
          <asp:TextBox ID="TXB_New" runat="server" Enabled="false" Text="<%# BindItem.Label %>"></asp:TextBox> 
         </div> 
        </asp:Panel> 
       </InsertItemTemplate> 
      </asp:TemplateField> 
     </Fields> 
</asp:DetailsView> 

を追加して、私のコードの後ろでexempleのために、私はただ、ラジオボタン、チェックであるかどうかテストしたい:

protected void RB_New_CheckedChanged(object sender, EventArgs e) 
{ 
     var RadioButtonNew = (RadioButton)FindControl("RB_New"); 
     var RadioButtonSelect = (RadioButton)FindControl("RB_Select"); 

     RadioButtonSelect.Checked = !RadioButtonNew.Checked; 
} 

そして、私が持っていますコントロールが見つからないため、 "System.NullReferenceException"が発生します。

なぜ私のコントロールを認識しないのですか?そしてこれに対処する方法は?あなたはページレベルでFindControlを使用している事前

+0

: 私はちょうどにFindControlを追加します。 –

+0

ありがとう、私はそれを試みますが、同じ例外があります。私はloadFunction、updateItem、getItem、insertItem、OnPreInitでテストしました。私は、ページ内でコントロールを呼び出すと、それが瞬間に関連する問題だと思います。しかし、私はそれを改善することを知らない。 – BoumBoumBam

答えて

0

感謝。しかし、コントロールはDetailsView内にあるため、最初にコントロールにアクセスする必要があります。

TextBox tb = DetailsView1.FindControl("TXB_New") as TextBox; 

//or 

var RadioButtonSelect = (RadioButton)DetailsView1.FindControl("RB_Select"); 
+0

ああああ!ありがとうございます、あなたは正しいです。わすれてた。しかし、まだ同じエラーがあります – BoumBoumBam

+0

あなたはどのエラーを持っているか教えてください? –

+0

私はあなたのスニペットでそれをテストし、上記のコードが働きました。しかしテストするためには、DetailsViewを 'DetailsViewMode.Insert'に手動で設定しなければなりませんでした。 – VDWWD

0

ありがとう、私は解決策を見つけました。

私は知らなかったが、パネル要素はコンテナのように機能していた。私はあなたがDetailViewの「OnDataBinding」イベントでのごRatioButtonコントロールを見つけるべきだと思い

var RadioButtonSelect = (RadioButton)DetailsView1.FindControl("Panel1").FindControl("RB_Select"); 
関連する問題