好的,我的第一篇文章,我希望标题有意义。
我有一个更新面板,里面有一个文件上传控件,带有一个触发上传的按钮。在其下方,我有一个 ListView,它在后面的文件中进行了数据绑定(bind),其中包含上传的文件列表。更新面板有一个指向上传按钮的“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> </td>
<td>Du har ikke uploadet filer endnu.</td>
<td> </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();
}
}
所以就像我说的,技术上一切正常,但简而言之,链接按钮不会刷新更新面板。
如果有任何问题或需要其他代码片段,我会及时回复。
提前谢谢你。
最佳答案
CommandName="Delete"
可能引发事件 ItemDeleted
和 ItemDeleting
而不是 ItemCommand
.尽管我不得不说,如果是这种情况,那么我预计页面会因缺少这些事件而崩溃(有关更多详细信息,请参见 MSDN)。
就是说,当我使用删除(或编辑)字作为命令时,我发现了问题。所以我会尝试以下操作
- 将命令的名称更改为类似
CommandName="ItemDelete"
的名称。ListViewDocuments_ItemCommand
是否现在触发 - 另外 - 看看它是否是更新面板导致的问题我会暂时删除它直到你确信项目命令如你所愿地触发。
希望对大家有帮助
关于c# - ASP.NET - 在 UpdatePanel 内的 ListView 内使用 LinkButton 触发异步回发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11327047/