2011-10-04 6 views
3

私はRadListViewと、以下に示すようにlstGameWaypoints_ItemCommandにバインドされたイベントハンドラを持っています。グリッドの最初の表示で、削除ボタンをクリックすると、ポストバックとItemCommandの起動が正常に開始されます。RadListView ItemCommandが起動しない

ポストバックが完了すると、イベントハンドラが再度接続されていないように見えます。削除ボタンをクリックすると、何も処理が行われません。

誰も以前に同様の問題を抱えていますか?

<telerik:RadListView runat="server" ID="RadListView1" 
DataSourceID="ObjectDataSource1" AllowPaging="true" 
OnDataBound="lstGameWaypoints_DataBound" 
OnItemCreated="lstGameWaypoints_ItemCreated" 
OnItemCommand="lstGameWaypoints_ItemCommand"> 
<EmptyDataTemplate> 
    <div style="width: 100px;margin: 10px auto auto auto;"><button class="AddWaypoint">Add Waypoint</button></div> 
</EmptyDataTemplate> 
<ItemTemplate> 
    <td> 
     <table style="border:1px solid black;width: 232px;height: 70px;margin:auto;"> 
      <tr> 
       <td> 
        Time: 
       </td> 
       <td> 
        <%# string.Format("{0:h:mm tt}", Eval("DateTime")) %> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Date: 
       </td> 
       <td> 
        <%# string.Format("{0:d}", Eval("DateTime")) %> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Chip Stack: 
       </td> 
       <td> 
        <%# string.Format("{0:C}", Eval("ChipStack")) %> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Notes: 
       </td> 
       <td> 
        <%# Eval("Notes") %> 
       </td> 
      </tr> 
      <tr>  
       <td colspan="2" style="text-align:right;"> 
        <asp:Button runat="server" ID="btnDelete" CssClass="deleteButton" CommandArgument='<%# Eval("WaypointID") %>' CommandName="Delete" Text="X" OnClientClick="return confirm('Are you sure you want to delete this waypoint?');" /> 
       </td> 
      </tr> 
     </table> 
    </td> 
</ItemTemplate> 
</telerik:RadListView> 

protected void lstGameWaypoints_ItemCommand(object sender, Telerik.Web.UI.RadListViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Delete") 
    { 
     //Do stuff 
    } 
} 

UPDATE:

私がこのコントロールのパネルをホストするために使用していますRadAjaxManagerの問題であることが表示されます。パネル上でajaxを無効にすると、すべて正常に動作します。

これは完全なコードです...

<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> 
     <AjaxSettings> 
      <telerik:AjaxSetting AjaxControlID="panGameWaypoints"> 
       <UpdatedControls> 
        <telerik:AjaxUpdatedControl ControlID="panGameWaypoints" LoadingPanelID="RadAjaxLoadingPanel1" /> 
       </UpdatedControls> 
      </telerik:AjaxSetting> 
      <telerik:AjaxSetting AjaxControlID="panGameDetails"> 
       <UpdatedControls> 
        <telerik:AjaxUpdatedControl ControlID="panGameDetails" LoadingPanelID="RadAjaxLoadingPanel1" /> 
       </UpdatedControls> 
      </telerik:AjaxSetting> 
     </AjaxSettings> 
     <ClientEvents OnRequestStart="RequestStart" OnResponseEnd="RequestEnd" /> 
    </telerik:RadAjaxManager> 

    <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Transparency="60"> 
     <div class="loading"> 
      <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/loading3.gif" AlternateText="loading" /> 
     </div> 
    </telerik:RadAjaxLoadingPanel> 

<asp:Panel runat="server" ID="panGameWaypoints" CssClass="GameWaypoints"> 
<table style="width:900px;margin:auto;"> 
     <tr> 
      <telerik:RadListView runat="server" ID="lstGameWaypoints" AllowPaging="false" 
       OnDataBound="lstGameWaypoints_DataBound" 
       OnItemCreated="lstGameWaypoints_ItemCreated" 
       OnNeedDataSource="lstGameWaypoints_NeedDataSource"> 

       <EmptyDataTemplate> 
        <div style="width: 100px;margin: 10px auto auto auto;"><button class="AddWaypoint">Add Waypoint</button></div> 
       </EmptyDataTemplate> 
       <ItemTemplate> 
        <td> 
         <table style="border:1px solid black;width: 232px;height: 70px;margin:auto;"> 
          <tr> 
           <td> 
            Time: 
           </td> 
           <td> 
            <%# string.Format("{0:h:mm tt}", Eval("DateTime")) %> 
           </td> 
          </tr> 
          <tr> 
           <td> 
            Date: 
           </td> 
           <td> 
            <%# string.Format("{0:d}", Eval("DateTime")) %> 
           </td> 
          </tr> 
          <tr> 
           <td> 
            Chip Stack: 
           </td> 
           <td> 
            <%# string.Format("{0:C}", Eval("ChipStack")) %> 
           </td> 
          </tr> 
          <tr> 
           <td> 
            Notes: 
           </td> 
           <td> 
            <%# Eval("Notes") %> 
           </td> 
          </tr> 
          <tr>  
           <td colspan="2" style="text-align:right;"> 
            <asp:Button runat="server" ID="btnDelete" CssClass="deleteButton" CommandArgument='<%# Eval("WaypointID") %>' CommandName="Delete" Text="X" OnClientClick="return confirm('Are you sure you want to delete this waypoint?');" /> 
           </td> 
          </tr> 
         </table> 
        </td> 
       </ItemTemplate> 
      </telerik:RadListView> 
    </tr> 
</table> 
</asp:Panel> 

答えて

0

あなたはPage_Initイベントに次のコードを追加しようとしましたか?

RadListView1.OnDataBound += new EventHandler(lstGameWaypoints_DataBound); 
RadListView1.OnItemCreated += new EventHandler(lstGameWaypoints_ItemCreated); 
RadListView1.OnItemCommand += new EventHandler(lstGameWaypoints_ItemCommand); 

これは、各ポストバックでイベントをフックする必要があります。

+0

おかげで、これを試してみました。いいえ、私は使っているRadAjaxManagerと何か関係があります。私がそれを無効にすると、すべてが期待通りに機能します。 –

0

あなたはRadAjaxManagerにリストを更新するよう指示する必要があると思います...?それは意味がありませんが、あなたのRadAjaxManagerにこれを追加してみてください:

<telerik:AjaxSetting AjaxControlID="lstGameWaypoints"> 
    <UpdatedControls> 
     <telerik:AjaxUpdatedControl ControlID="lstGameWaypoints" LoadingPanelID="RadAjaxLoadingPanel1" /> 
    </UpdatedControls> 
</telerik:AjaxSetting> 

RadListViewが、それはイベントだ再配線されますこの方法。

0

私はあなたがこの代わりの

<telerik:AjaxSetting AjaxControlID="lstGameWaypoints"> 
      <UpdatedControls> 
       <telerik:AjaxUpdatedControl ControlID="lstGameWaypoints" LoadingPanelID="RadAjaxLoadingPanel1" /> 
      </UpdatedControls> 
     </telerik:AjaxSetting> 

上記と私はlstGameWaypoints ItemCommandイベントが配線されていると、あなたもイベントをOnItemDeleting使用することができます表示されていない

<telerik:AjaxSetting AjaxControlID="panGameWaypoints"> 
      <UpdatedControls> 
       <telerik:AjaxUpdatedControl ControlID="panGameWaypoints" LoadingPanelID="RadAjaxLoadingPanel1" /> 
      </UpdatedControls> 
     </telerik:AjaxSetting> 

の使用を追加する必要があります事をしないでくださいitemコマンドのinsted。

0

問題は、btnDeleteにアタッチしたOnClientClickイベントにあると思います。

あなたの状況をシミュレートしようとしましたが、ボタンをOnClientClickingというイベントを公開するRadButton(あなたはTelerik環境にあります)に置き換えました。だから私は、JS関数を作成しました:

function RadConfirm_Delete(sender, args) 
{ 
    var callBackFunction = Function.createDelegate(sender, function (shouldSubmit) 
    { 
     if (shouldSubmit) 
     { 
      this.click(); 
     } 
    }); 

    radconfirm("Are you sure you want to delete this waypoint?", callBackFunction, 350, 100, null, "Confirm delete"); 
    args.set_cancel(true); 
} 

をし、私のようなRadButtonをsettedました:

<telerik:RadButton runat="server" ID="btnDelete" CssClass="deleteButton" CommandArgument='<%# Eval("WaypointID") %>' CommandName="Delete" Text="X" OnClientClicking="RadConfirm_Delete" /> 

すべての権利動作しているようです。

私に教えてください!

1

私は私はあなたの問題を再現することができるかどうかを確認するために少しテストケース(下記付属)を作成し、あなたの実装と私の間に3つの主な違いがあった:私はRadAjaxLoadingPanel が指定されていませんでした

  1. は、
  2. 私は
確認ダイアログを使用していない任意の ClientEvents(すなわち RequestStartRequestEnd
  • が指定されていませんでした通過して、私のテスト・ケースにこれらのそれぞれを追加した後

    溶液#1

    私はRadAjaxManagerで確認ダイアログを使用して問題があったことを発見しました。

    以下にごOnClientClickコードを変更

    :少し研究では、以下のソリューションが提供さ

    OnClientClick="if(!confirm('Are you sure you want delete this?')) return false;" 
    

    をこれはあなたの問題を解決していますか?ここで

    は、この問題に関するいくつかのドキュメントです:
    www.telerik.com/help/aspnet-ajax/ajax-confirmation.html


    上記の問題を解決する必要がありますが、しようとしていない場合は、一時的に削除しますRequestStartRequestEndクライアントのイベントが表示され、問題が見つかるまで "エクストラ"が引き続き削除されます。ここで

    は期待どおりに動作テストケースである:

    ASPX:

    <telerik:RadAjaxManager ID="rda" runat="server"> 
        <AjaxSettings> 
         <telerik:AjaxSetting AjaxControlID="pnlTest"> 
          <UpdatedControls> 
           <telerik:AjaxUpdatedControl ControlID="pnlTest" /> 
          </UpdatedControls>    
         </telerik:AjaxSetting> 
        </AjaxSettings> 
    </telerik:RadAjaxManager> 
    <asp:Panel ID="pnlTest" runat="server"> 
        <telerik:RadListView ID="lst" runat="server" OnItemCommand="lst_Command" OnNeedDataSource="lst_NeedDataSource"> 
         <ItemTemplate> 
          <%#Eval("Test")%> 
          <asp:Button ID="btnDelete" runat="server" CommandArgument='<%#Eval("Test")%>' OnClientClick="if(!confirm('Are you sure you want delete this?')) return false;" CommandName="Delete" Text="Test" /> 
         </ItemTemplate> 
        </telerik:RadListView> 
        <asp:Label ID="lblCommandArg" runat="server"></asp:Label> 
    </asp:Panel> 
    

    コードビハインド:

    protected void lst_NeedDataSource(object sender, RadListViewNeedDataSourceEventArgs e) 
    { 
        DataTable table = new DataTable(); 
        table.Columns.Add("Test", typeof(string)); 
    
        DataRow row = table.NewRow(); 
        row.SetField<string>("Test", "Testing"); 
        table.Rows.Add(row); 
    
        row = table.NewRow(); 
        row.SetField<string>("Test", "Testing again"); 
        table.Rows.Add(row); 
    
        lst.DataSource = table; 
    } 
    
    protected void lst_Command(object sender, RadListViewCommandEventArgs e) 
    { 
        lblCommandArg.Text = e.CommandArgument.ToString(); 
    } 
    

    RadAjaxPanel代わりのRadAjaxManager

    探しを使います〜であなたのコードは、RadAjaxManagerの代わりにRadAjaxPanelを使うのが最も簡単な解決策のようです。これがあなたのためのオプションであるかどうかは分かりませんが、おそらくコードを動作させる最も簡単な方法です。

    は内に含まれるすべてのものは、AJAXを使用することを保証するであろう、ではなく、通常のパネルのpanGameWaypointsためRadAjaxPanelを使用してください:入力用

    <telerik:RadAjaxPanel ID="panGameWaypoints" runat="server"> 
        <telerik:RadListView ID="RadListView1" runat="server" ... > 
    </telerik:RadAjaxPanel> 
    
  • 関連する問題