ASP.NET - 使用UpdateView内部的ListView内的LinkBut​​ton触发asyncpostback

时间:2012-07-04 10:15:55

标签: c# asp.net listview updatepanel linkbutton

好的,我的第一篇文章,我希望这个标题是有道理的。

我有一个updatepanel,里面有一个文件上传控件,带有一个按钮来触发上传。在我的下面我有一个ListView,它在后面的文件中带有一个上传的文件列表。 updatepanel有一个指向上传按钮的“PostBackTrigger”。

所有这一切都正常运作。对于列出的每个项目,都有一个删除该特定文件的链接按钮。这也有效,但这应该是: 它不会触发回发,我在搜索网络后尝试了很多方法,而不是提到stackoverflow的答案。我尝试了很多,但即使实现了最佳解决方案,也没有真正发生。

ascx文件(是的,如果重要,则为其用户控件):

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
    <asp:Label ID="LabelUploadFile" runat="server" Text="Upload fil:"></asp:Label>
    <br />
    <asp:FileUpload ID="FileUploadDocument" runat="server" />
    <br />
    <asp:DropDownList ID="DropDownListDocumentType" runat="server"></asp:DropDownList>
    <br />
    <asp:Button ID="ButtonUploadFile" runat="server" Text="Upload fil" CssClass="nice small radius action button" onclick="ButtonUploadFile_Click" />
    <br />
    <br />
    <br />
    <asp:ListView ID="ListViewDocuments" runat="server" OnItemCommand="ListViewDocuments_ItemCommand">
        <LayoutTemplate>
            <table border="0" cellpadding="1">
                <tr>
                    <th align="left">Type</th>
                    <th align="left">Dokument</th>
                    <th></th>
                </tr>
                <tr id="itemPlaceholder" runat="server"></tr>
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr>
                <td><asp:Label runat="server" ID="lblName"><%#Eval("Type") %></asp:Label></td>
                <td><asp:Label runat="server" ID="lblType"><%#Eval("Dokument") %></asp:Label></td>
                <td><asp:LinkButton ID="DeleteButton" OnClientClick="return confirm('Slet dokument?');" CommandName="Delete" CommandArgument='<%# Eval("id")%>' runat="server" Text="Slet"></asp:LinkButton></td>
            </tr>
        </ItemTemplate>
        <EmptyDataTemplate>
            <tr>
                <td>&nbsp;</td>
                <td>Du har ikke uploadet filer endnu.</td>
                <td>&nbsp;</td>
            </tr>
        </EmptyDataTemplate>
    </asp:ListView>
</ContentTemplate>
<Triggers>
    <asp:PostBackTrigger ControlID="ButtonUploadFile" />
    <asp:AsyncPostBackTrigger ControlID="ListViewDocuments" EventName="ItemCommand" />
</Triggers>

(注意asyncpostbacktrigger只是我试过的另一个我没有删除的解决方案。还有一个scriptmanager,它只是没有在上面的代码中表示)

后台文件中的ListViewDocuments_ItemCommand:

protected void ListViewDocuments_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        if (e.CommandName == "Delete")
        {
            //Send the file's ID to the data layer for deletion
            _talentDataAccess.DeleteTalentFileByFileId(Convert.ToInt32(e.CommandArgument));
            //Rebind the listveiw with a new list of files.
            _fillFileList();
        }
    }

就像我说的那样,技术上一切正常,但简而言之,linkbutton不刷新更新面板。

如果对其他代码段有任何疑问或需要,我会及时回复。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

CommandName="Delete"可能会引发事件ItemDeletedItemDeleting而不是ItemCommand。虽然我不得不说如果是这种情况,那么我会期望由于缺少这些事件而导致页面崩溃(有关详细信息,请参阅MSDN)。

那说当我使用删除(或编辑)字作为命令时,我发现了问题。所以我会尝试以下

  1. 将命令名称更改为CommandName="ItemDelete"ListViewDocuments_ItemCommand现在开火吗
  2. 另外 - 要查看是否是导致问题的更新面板,我会暂时将其删除,直到您确信item命令会根据需要触发。
  3. 希望它有所帮助