首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除最后一个项目时,ASP.NET面板不会更新

删除最后一个项目时,ASP.NET面板不会更新
EN

Stack Overflow用户
提问于 2011-06-20 17:34:29
回答 2查看 898关注 0票数 1

我确信我在这里遗漏了一些非常明显的东西,但我就是看不到它。

我有一个包含datalist的更新面板。datalist的每一项都有一个delete按钮,我可以用它来发出该项的Delete命令。

删除是一个两部分的过程:我首先从代码后台弹出一个模式对话,要求确认,如下所示:

代码语言:javascript
运行
复制
/// <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按钮时,我继续执行:

代码语言:javascript
运行
复制
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标记:

代码语言:javascript
运行
复制
    <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,单选按钮列表等,它允许我指定数据的排序(数据来自对象数据源)

我有包含项的datalist。每一项都有一个hovermenuextender,我可以在其中按下编辑和删除命令的按钮。

模态弹出窗口也在更新面板内,但在datalist之外,因此可以根据需要进行更新。

我的问题是,只要我删除的项不是Datalist中剩下的最后一项,它就可以很好地工作。如果它是最后一个项目,则不会显示最后一个弹出窗口(mpNotificationPopup)。

代码会一直执行下去,所以缺少项目一定会导致upadte面板(udpKeywordsManager)无法更新?

在这种情况下,任何关于如何让datalist更新的帮助都将是非常受欢迎的。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-06-20 17:43:29

您也应该向我们展示aspx标记,但也许您已经在UpdatePanel中使用了ModalPopupExtender。尝试将具有ModalPopupExtender的PopupControlID属性ID的div/Panel移到UpdatePanel之外。

您只需将UpdatePanel嵌套在Popup-Control中,而不是在它周围。

我希望下面的内容能让事情变得更清楚:

而不是这样做:

代码语言:javascript
运行
复制
<UpdatePanel> 
   <DataList> 
   </DataList> 
   <ModalPopupExtender> 
   </ModalPopupExtender> 
</UpdatePanel> 

你应该这样做:

代码语言:javascript
运行
复制
<ModalPopupExtender> 
   <UpdatePanel> 
      <DataList> 
      </DataList> 
   </UpdatePanel>
<ModalPopupExtender> 
票数 1
EN

Stack Overflow用户

发布于 2011-06-21 13:08:09

回答我自己的问题。在痛苦地重新构建了整个过程之后,我意识到我在datalist的OnPreRender事件中将更新面板的可见性设置为false,而此时没有剩下任何项。这基本上在刷新中途关闭了更新面板,因此当最后一个元素被删除时,页面不会刷新。

我通过在更新面板中放置一个面板对其进行排序,其中包含除“无信息可用”标签之外的所有元素,并切换该面板的可见性。为这个愚蠢的问题道歉,我想我写这段代码时有一个愚蠢的时刻……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6409291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档