2010-12-14 8 views
1

とリピータ:私は "AdminGetAllRPT" と表示されたリピータ内の次のHiddenFieldを持っているのHiddenField

<asp:Repeater ID="AdminGetAllRPT" runat="server" OnLoad="AdminGetAllRPT_Load"> 
    <HeaderTemplate> 
     <table id="AdminGetAllTBL"> 
      <tr> 
       <td></td> 
       <td>Username</td> 
       <td>Email Address</td> 
       <td>First Name</td> 
       <td>Last Name</td> 
       <td>Active?</td> 
      </tr> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td> 
       <asp:LinkButton ID="AdminEditLnk" runat="server" OnClick="AdminEdit_OnClick">Edit 
       <asp:HiddenField ID="editAdminEmail" runat="server" Value='<%# Eval("emailAddress") %>' /> 
       </asp:LinkButton> 
      </td> 
      <td><%# Eval("userName") %></td> 
      <td><%# Eval("emailAddress") %></td> 
      <td><%# Eval("firstName") %></td> 
      <td><%# Eval("lastName") %></td> 
      <td><%# Eval("isActive") %></td> 
     </tr> 
    </ItemTemplate> 
    <AlternatingItemTemplate> 
     <tr class="alternateTemplate"> 
      <td> 
       <asp:LinkButton ID="AdminEditLnk" runat="server" OnClick="AdminEdit_OnClick">Edit 
       <asp:HiddenField ID="editAdminEmail" runat="server" Value='<%# Eval("emailAddress") %>' /> 
       </asp:LinkButton> 
      </td> 
      <td><%# Eval("userName") %></td> 
      <td><%# Eval("emailAddress") %></td> 
      <td><%# Eval("firstName") %></td> 
      <td><%# Eval("lastName") %></td> 
      <td><%# Eval("isActive") %></td> 
     </tr> 
    </AlternatingItemTemplate> 
    <FooterTemplate> 
      <tr> 
       <td colspan="2"><a href="#">Add Administrator</a></td> 
      </tr> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

私はこのコードを発射するLinkBut​​tonあります

protected void AdminEdit_OnClick(object sender, EventArgs e) 
{ 
    HiddenField hf = (HiddenField)AdminGetAllRPT.FindControl("editAdminEmail"); 

をしかし、HFはNULLを来ています。私は間違って何をしていますか?

答えて

11

変更AdminGetAllRPT.FindControl ...

e.Item.FindControlへ

...

編集:正しい答えでvotedownてくれてありがとう。

はい、e.Item.FindControlはボタンのイベントではないため、リピーターのItemCommandのイベントです。そして、あなたはセットアップ

void MyButtonCommandEvent(Object src, RepeaterCommandEventArgs e) { 
    //My event that is raised for each button pressed in the RepeaterItem 
    var poo = e.Item.FindControl("myhiddenfieldid") as HiddenField; 
} 

完了イベントできるコードビハインドで

<asp:Repeater OnItemCommand="MyButtonCommandEvent" ID="AdminGetAllRPT" runat="server" OnLoad="AdminGetAllRPT_Load"> 

...


すべてRepeaterItemsを反復処理するために、あなたは外のボタンを持つことができますリピーター(または、フッターなどで、リピーターItemCommandではない)

foreach(var item in AdminGetAllRPT.Items) 
{ 
    if (item.ItemType == RepeaterItemType.Item || item.ItemType == RepeaterItemType.AlternatingItem) 
    { 
     var hiddenField = item.FindControl("hiddenFieldid") as HiddenField; 
     //Do Stuff 
    } 
} 
+0

私はRepeaterアクションをしていないと動作しません。 – balexander

+0

@ Bry4nので、あなたの質問へのアップデートに基づいており、現在はコードを提供しています。私の答えは正しい。あなたはそれを間違っているだけです。リピーターのItemCommandイベントを追加し、ボタンからイベントを削除する必要があります。これでe.Item.FindControlが得られます。 – Phill

+0

@Phill私は謝罪します。 e.ItemはRepeater関数内で使用されています。私は1つではなく、通常のOnClickを使用していました。私は家に帰るときにこの解決法をチェックします。ありがとう! – balexander

0

RepeaterItem内の非表示フィールドを見つける必要があります。

foreach(var item in AdminGetAllRPT.Items) 
{   
    var hf = (HiddenField)item.FindControl("editAdminEmail"); 
} 
+0

のようなコードを使用することができます。これは、常にリピータの最初の行から隠されたフィールドを取得するということです。 – VinayC

+0

@VinayC、これは実際にリピータのすべての行から隠されたフィールドを取得します。 – jball

2

もう1つのことは、編集ボタンコントロールの下にカプセル化されていない可能性があります。検索制御方式が機能するためにそれはそうのようになります。例えば


<asp:button id="AdminEdit" runat="server" onclick.... > 
    <!-- Now put in your hidden field control inside (encapulated) in your button. --> 
    <asp:HiddenField ID="editAdminEmail" runat="server" Value='<%# Eval("emailAddress") %>' /> 
</asp:button> 

AdminEdit.Controlsは、コントロールのコンテナであるので、あなたは今、最初のレベルとして、そのコントロールを見つけることができるはずです子。ボタンの子でない場合は、それを子にするか、別の方法で参照する必要があります。これは、特に動的に生成されるコントロールに当てはまります。つまり...どのようなコントロールやルート要素がその子ですか?

+0

後ろのコードではどうすればいいですか? FindControlを使用しますか? – balexander

0

jball has pointed outとして、リピーターアイテムレベルで検索する必要があります。あなたのリンクボタンはどこにありますか?私はそれがリピータそれ自身でなければならないと信じています(そうでなければ、複数の隠れたフィールド(各リピータ行ごとに1つ)と、リンクボタンで取り上げられるはずのフィールドがあります)。だから両方のリンクボタンと隠しフィールドがリピータにある場合は、

protected void AdminEdit_OnClick(object sender, EventArgs e) 
{ 
    var repeaterItem = ((Control)sender).NamingContainer; 
    HiddenField hf = (HiddenField)repeaterItem.FindControl("editAdminEmail"); 
+0

これは動作しますが、行ごとに複数の隠しフィールドがあるので、編集ボタンが参照している行をキャプチャします。 – balexander

+0

@ Bry4nは私の更新された答えを読んで、あなたはRepeater Item Commandを使いたいと思っています。 – Phill