2011-06-20 14 views
1

私はここで本当に明白な何かが欠けていると確信していますが、私はそれを見ることができません。最後のアイテムが削除されたときにASP.NETパネルが更新されない

私は内部にデータリストを持つ更新パネルを持っています。データリストの各アイテムには、アイテムの削除コマンドを発行するための削除ボタンがあります。

削除は、2段階のプロセスである:私は最初にそうように、確認を求めるために分離コードからモーダルダイアログをポップアップ:私は得ることができるように

/// <summary> 
/// Manager delete command 
/// </summary> 
protected void dlKeywordsManager_DeleteCommand(object source, DataListCommandEventArgs e) 
{ 
    //Get the subject ID 
    int keywordID = (int)dlKeywordsManager.DataKeys[e.Item.ItemIndex]; 

    //Remember the keyword ID on the modal popup 
    hfKeywordID.Value = keywordID.ToString(); 
    btnConfirmationPopupOK.CommandArgument = "Delete"; 

    lblConfirmationPopupMessage.Text = "キーワード「" + e.CommandArgument.ToString() + "」を本当に削除しますか?"; 

    mpConfirmationPopup.Show(); 
    dlKeywordsManager.DataBind(); 
    udpKeywordsManager.Update(); 
} 

このモーダルポップアップが更新パネル内にありますラベルのテキスト値が部分的なポストバックでリフレッシュされます。

使用は、私が実行するために行くポップアップのOKボタンを押すと:

protected void btnConfirmationPopupOK_Click(object source, EventArgs e) 
{ 
     int keywordID = int.Parse(hfKeywordID.Value); 
     KeywordBLLOperation operationResult; 
     switch (((Button)source).CommandArgument) 
     { 
      case "Delete": 
       operationResult = keywordsAPI.DeleteKeyword(keywordID); 
       switch (operationResult.Result) 
       { 
        case KeywordBLLOperationResult.Deleted: 
         lnlNotificationsPopupMessage.Text = "キーワード「" + operationResult.KeywordName + "」を削除しました。"; 
         break; 
        case KeywordBLLOperationResult.Failed: 
         lnlNotificationsPopupMessage.Text = "キーワード「" + operationResult.KeywordName + "」の削除に失敗しました。アドミニストレーターにお伝えください。"; 
         break; 
       } 
       break; 
     } 
     mpNotificationPopup.Show(); 
     dlKeywordsManager.DataBind(); 
     udpKeywordsManager.Update(); 
} 

を私は簡潔にするため、ここでいくつかの非本質的な行を削除しています。

そしてここでのコードで行くにはASPXマークアップです:

<asp:UpdatePanel ID="udpKeywordsManager" runat="server" Visible="true" UpdateMode="Conditional" > 

<ContentTemplate> 

    <div class="keywordsManagerHeader"> 

     <%--DISPLAY STATISTICS--%> 
     <asp:CheckBox ID="chkShowUsageStatistics" runat="server" Text="参照回数を表示する" AutoPostBack="true" OnCheckedChanged="chkShowUsageStatistics_CheckedChanged" CssClass="keywordsManagerCheckBoxes" TextAlign="Left" /> 

     <%--DISPLAY ORDER--%> 
     <span class="keywordsManagerLabel" >並べ替え</span> 
     <asp:DropDownList ID="ddlKeywordsOrder" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlKeywordsOrder_SelectedIndexChanged" > 
      <asp:ListItem Text="なし" Value="None" /> 
      <asp:ListItem Text="科目名" Value="Name" /> 
      <asp:ListItem Text="参照回数" Value="Frequency" /> 
     </asp:DropDownList> 
     <asp:RadioButtonList ID="rdlOrder" runat="server" AutoPostBack="true" RepeatLayout="Flow" RepeatDirection="Horizontal" CssClass="keywordsManagerRadioButtons" Enabled="false" > 
      <asp:ListItem Text="昇順" Value="Ascending" /> 
      <asp:ListItem Text="降順" Value="Descending" /> 
     </asp:RadioButtonList> 

     <%--UPDATE PROGRESS INDICATOR--%> 
     <span style="position: absolute;"> 
      <asp:UpdateProgress ID="udpSubjectsManagerUpdateProgress" AssociatedUpdatePanelID="udpKeywordsManager" runat="server" DisplayAfter="500" DynamicLayout="False" > 
       <ProgressTemplate> 
        <img class="updateProgressIndicator" src="~/Library_Images/Animations/ajax_loading.gif" alt="" runat="server" /> 
       </ProgressTemplate> 
      </asp:UpdateProgress> 
     </span> 

    </div> 

    <div class="keywordsManagerContainer"> 

     <%--SUBJECTS DATALIST--%> 
     <asp:DataList ID="dlKeywordsManager" runat="server" DataKeyField="Keyword_ID" DataSourceID="dsBookKeywords" RepeatDirection="Horizontal" 
      OnItemDataBound="dlKeywordsManager_ItemDataBound" OnDeleteCommand="dlKeywordsManager_DeleteCommand" OnUpdateCommand="dlKeywordsManager_UpdateCommand" OnPreRender="dlKeywordsManager_PreRender" > 

      <ItemTemplate> 

       <span id="KeywordInfo" class="keywordsManagerItem" runat="server"> 
        <asp:Label ID="Subject_NameLabel" runat="server" Text='<%# Eval("Keyword_Name") %>' /> 
        <asp:Label ID="Subject_FrequencyLabel" runat="server" Text='<%# " (" + Eval("Frequency") + ")" %>' Visible="false" /> 
       </span> 

       <%--HOVER MENU PANEL--%> 
       <asp:Panel ID="pnlKeywordContextMenu" runat="server" CssClass="keywordsManagerPopupMenuOverall"> 

        <div class="keywordsManagerPopupMenuRow" > 
         <span class="keywordsManagerLabel">科目「</span> 
         <asp:Label ID="pnlSubjectContextMenu_Subject_NameLabel" runat="server" Text='<%# Eval("Keyword_Name") %>' /> 
         <span class="keywordsManagerLabel">」を参照している文書数:</span> 
         <asp:Label ID="pnlSubjectContextMenu_Subject_FrequencyLabel" runat="server" Text='<%# Eval("Frequency") %>' /> 
        </div> 

        <div ID="Book_ISO_NumbersList" class="keywordsManagerBookISONumbersList" runat="server" visible='<%# (string.IsNullOrEmpty(Eval("Book_ISO_Numbers").ToString())) ? bool.Parse("false") : bool.Parse("true") %>' > 
         <span class="keywordsManagerLabel">文書:</span> 
         <asp:Label ID="Book_ISO_Numbers_Label" runat="server" Text='<%# Eval("Book_ISO_Numbers") %>' /> 
        </div> 

        <div class="keywordsManagerPopupMenuSeparator"></div> 

        <div class="keywordsManagerPopupMenuRow" > 
         <asp:TextBox ID="Keyword_NameTextBox" runat="server" Text='<%# Eval("Keyword_Name") %>' CssClass="keywordsManagerPopupMenuInput" /> 
         <asp:Button ID="btnEdit" runat="server" Text="編集" CssClass="buttonShortBottom" CommandName="Update" CausesValidation="true" CommandArgument='<%# Eval("Keyword_Name") %>' /> 
         <asp:Button ID="btnDelete" runat="server" Text="削除" CssClass="buttonShort" CommandName="Delete" CommandArgument='<%# Eval("Keyword_Name") %>' /> 
        </div> 

       </asp:Panel> 

       <%--HOVER MENU EXTENDER--%> 
       <asp:HoverMenuExtender ID="hmeKeywordContextMenu" runat="server" TargetControlID="KeywordInfo" PopupControlID="pnlKeywordContextMenu" PopDelay="100" PopupPosition="Right" HoverDelay="100" /> 

      </ItemTemplate> 

      <SeparatorTemplate> 

       <span class="keywordsManagerItemSeparator"></span> 

      </SeparatorTemplate> 

     </asp:DataList> 

    </div> 

    <%--MODAL POPUPS--%> 
    <%--CONFIRMATION POPUP--%> 
    <asp:Panel ID="pnlConfirmationsPopup" runat="server" CssClass="modalNotificationOverall" > 
      <div class="modalNotificationRow"> 
       <asp:Label ID="lblConfirmationPopupMessage" runat="server" Text="" /> 
      </div> 
      <div class="modalNotificationRow"> 
       <asp:Button ID="btnConfirmationPopupOK" runat="server" Text="はい" CssClass="buttonMediumLong" OnClick="btnConfirmationPopupOK_Click" /> 
       <asp:Button ID="btnConfirmationPopupCancel" runat="server" Text="いいえ" CssClass="buttonMediumLong" /> 
      </div> 
     <asp:HiddenField ID="hfKeywordID" runat="server" /> 
     <asp:HiddenField ID="hfNewKeywordName" runat="server" /> 
     </asp:Panel> 
    <%--NOTIFICATION POPUP--%> 
    <asp:Panel ID="pnlNotificationsPopup" runat="server" CssClass="modalNotificationOverall" > 
      <div class="modalNotificationRow"> 
       <asp:Label ID="lnlNotificationsPopupMessage" runat="server" Text="" /> 
      </div> 
      <div class="modalNotificationRow"> 
       <asp:Button ID="btnNotificationsPopupOK" runat="server" Text="OK" CssClass="buttonMediumLong" /> 
      </div> 
     </asp:Panel> 
    <%--MODAL POPUP ANCHORS AND MODULES--%> 
    <%--DELETE CONFIRMATION--%> 
    <asp:Label ID="lblConfirmationPopupAnchor" runat="server" Text="" /> 
    <asp:ModalPopupExtender ID="mpConfirmationPopup" runat="server" TargetControlID="lblConfirmationPopupAnchor" PopupControlID="pnlConfirmationsPopup" BackgroundCssClass="modalNotificationBackground" CancelControlID="btnConfirmationPopupCancel" /> 
    <asp:Label ID="lblNotificationPopupAnchor" runat="server" Text="" /> 
    <asp:ModalPopupExtender ID="mpNotificationPopup" runat="server" TargetControlID="lblNotificationPopupAnchor" PopupControlID="pnlNotificationsPopup" BackgroundCssClass="modalNotificationBackground" CancelControlID="btnNotificationsPopupOK" /> 

</ContentTemplate> 

マークアップの多くはそこにあります。構造は以下の通りです:データのソートを指定するためのdropdownlist、radiobuttonlistなどのヘッダーセクションがあります(データはオブジェクトデータソースから来ます)

私はアイテムを持つデータリストを持っています。各項目には、編集や削除のコマンドを発行するためのボタンがあります。

モーダルポップアップは、必要に応じて更新できるように、更新パネル内でもデータリストの外側にもあります。

私の問題は、削除したアイテムがデータリストに残っている最後のアイテムでない限り、正常に動作するということです。最後の項目の場合は、最後のポップアップ(mpNotificationPopup)は表示されません。

コードが完全に実行されるため、項目が不足するとアップパッドパネル(udpKeywordsManager)が更新されないようにする必要がありますか?

この場合、データリストを更新する方法についてのヘルプは、大歓迎です。

ありがとうございます。

+0

あなたのUpdatePanelのためのマークアップコードを投稿できますか? (その要素はおそらく関係ありませんが、属性とトリガーは役に立ちます)。 –

+0

あなた:そうです、最初にマークアップを追加する必要があります。私は今質問にマークアップを追加しました。 –

+0

私はちょうど本当に単純化されたプロジェクトでこれをもう一度試しました。そして、実際に私がここに持っている方法でうまくいくはずです... –

答えて

1

aspxマークアップも表示する必要がありますが、おそらくあなたのUpdatePanelの内部にModalPopupExtenderを使用しています。 ModalPopupExtenderのPopupControlIDプロパティのIDがUpdatePanel外にあるdiv/Panelに移動してください。

ポップアップコントロール内にUpdatePanelをネストする必要があり、ポップアップコントロールの周りには入れないでください。

代わりに、このようにそれを行うの:

<UpdatePanel> 
    <DataList> 
    </DataList> 
    <ModalPopupExtender> 
    </ModalPopupExtender> 
</UpdatePanel> 

あなたはこのようにそれを行う必要があります:私は次のよう願っ

は、それが明確になり

<ModalPopupExtender> 
    <UpdatePanel> 
     <DataList> 
     </DataList> 
    </UpdatePanel> 
<ModalPopupExtender> 
+0

こんにちは、答えに感謝します。私はあなたが正しく言っていることに従っているとは確信していません。 私は: ? これはモーダルポップアップパネルをまったくリフレッシュしないので、このような確認ダイアログとしては使用できません。 –

+0

@ user643192:あなたの問題を解決してうれしいです。いずれにしても、ModalPopupExtenderでUpdatePanelsをネストする方法を明確にするために、私の答えを編集しました。 –

+0

ああ、あなたが今何を意味しているのか分かります。モーダルポップアップだけを更新すると、データリスト全体をリフレッシュする必要がなくなります。モーダルポップアップダイアログを行うもっと効率的な方法。ヒントをありがとう! –

1

自分の質問に答えます。全体を痛いように再構築した後、アイテムが残っていないときに、データリストのOnPreRenderイベントで更新パネルの表示をfalseに設定していることに気付きました。これは基本的に更新パネルの半分を最新表示に切り替えたので、最後の要素が削除されたときにページが更新されませんでした。

「情報がありません」というラベルを除いて、そのパネル内のすべての要素を含むパネルをパネルに配置して並べ替え、その表示を切り替えます。愚かな質問のお詫び、私はこのコードを書いたとき、私は愚かな瞬間をしていたと思います...

関連する問題