2011-07-07 7 views
0

こんにちはすべて私は以下のコードを使用しており、チェックボックスのステータスに基づいてボタンを表示して非表示にしたかったとします。私はイベントを呼び出すためにトリガを使用していますが、そのボタンを表示または非表示にするコードを記述します。以下のコードを使用すると、「System.InvalidOperationException:ID「chkDelete」のコントロールがUpdatePanel 'UpdatePanel1'のトリガーに見つかりませんでした」というエラーが表示されます。私を助けてください。 ControlIdチェックボックスフィールド<asp:CheckBox ID="chkDelete" runat="server" AutoPostBack="true" ></asp:CheckBox>ためチェックボックスコントロールのasp.netトリガー

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers ="false"> 
    <ContentTemplate> 
      <asp:GridView ID="gvEventMechanic" runat="server" AutoGenerateColumns="False" PageSize="5" 
         GridLines="None" AllowSorting="true" BorderWidth="1" 
         EnableViewState="true" AllowPaging="true">  
      <Columns> 
       <asp:TemplateField>      
        <HeaderTemplate> 
         Disable 
         </HeaderTemplate> 
        <ItemStyle HorizontalAlign="Center" /> 
        <ItemTemplate>        
         <asp:CheckBox ID="chkDelete" runat="server" AutoPostBack="true" ></asp:CheckBox> 
        </ItemTemplate> 
       </asp:TemplateField>      
      </Columns>     
     </asp:GridView> 
     </ContentTemplate> 
     <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="chkDelete" EventName="CheckBoxEventChanged" /> 
      </Triggers>      
     </asp:UpdatePanel> 

答えて

0

意志それがトリガーにcontrolIdをマッピングすることができない理由である行ごとに異なります。
チェックボックスのCheckedChangedイベントを使用してメソッドをトリガすることをお勧めします。

+0

CheckedChangedを使用すると、1つのセッションで複数のチェックボックスをクリックすると、ページがポストバックします。それを避けるために、私はパネルとトリガを更新するつもりです。他の方法であれば私に知らせてください。このチェックボックスはグリッド内にあります – premg

+0

controlIdを取得するのは難しいです。あなたはクライアント側からjavascriptを使って何かを試すことができるかもしれません。 – Saanch

+0

あなたは私にその事例をいくつか教えていただけますか? – premg

1

代わりに、これを行うためにクライアント側の環境を使用しないのはなぜですか?より簡単でネイティブです。

ここで、このクラスに基づいて、スパンの場合はCSSを使用してボタンを調整したり、div(カスタムボタン)を調整したりできます。それ以外の場合は、次のように使用できます。

$('#input[type=checkbox][id*=chkDelete]').change(function(){ 
     if ($(this).is(':checked')) 
     { 
      $('#button').removeAttr('disabled'); 
     } 
     else 
     { 
      $('#button').attr('disabled', 'disabled'); 
     } 
    }); 
+0

このタグを修正して解決策を得ましたが、正しい引き金。 – premg

1

これにより、適切なレコードを削除するために必要なすべての情報を取得できます。

// If you bind a list of objects as your data source you can use this to get the 
// index into the list. 
protected void OnCheckedChanged(Object sender, EventArgs e) 
{ 
    if (sender is CheckBox) 
    { 
     // we do this to get the index into the list of the item we want to work with. 
     CheckBox  cb = sender as CheckBox; 
     GridViewRow gvr = cb.NamingContainer as GridViewRow; 

     int dataItemIndex = gvr.DataItemIndex; // index into your list, regardless of page 
     int rowIndex  = gvr.RowIndex;  // row index in gridview. 
    } 
} 
0

はいです。これはCheckedChangedです。 あなたはチェックボックスであなたが何を言及しているかはわかりませんが。しかし、この方法で動作します。

関連する問題