c# - ASP.NET 转发器问题(+关于最佳实践的问题)

标签 c# asp.net repeater

我是 ASP.NET 的新手,最近发现了中继器。有些人使用它们,有些人不使用,我不确定哪种解决方案是最佳实践。

根据我的经验,它使简单的操作(显示列表)变得简单,但一旦你想做更复杂的事情,复杂性就会爆炸,逻辑明智。

也许这只是我和我对这个概念的理解不足(这很有可能),所以这里有一个我正在尝试做的事情和我的问题的例子:


问题:我想显示文件夹中的文件列表。

解决方案:

String fileDirectory = Server.MapPath("/public/uploaded_files/");
String[] files = Directory.GetFiles(fileDirectory);
repFiles.DataSource = files;
repFiles.DataBind();

<asp:Repeater ID="repFiles" runat="server" OnItemCommand="repFiles_ItemCommand" >
        <ItemTemplate>
           <a href="/public/uploaded_files/<%# System.IO.Path.GetFileName((string)Container.DataItem) %>" target="_blank">View in a new window</a> 
           <br />
        </ItemTemplate>  
</asp:Repeater>

这很好用。


新问题:我希望能够删除那些文件。

解决方案:我在项目模板中添加一个删除链接:

<asp:LinkButton ID="lbFileDelete" runat="server" Text="delete" CommandName="delete" />

我捕捉到了事件:

   protected void repFiles_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "delete")
            {
                // ... blah
            }
        }

...然后呢?知道 e.Item.DataItem 为空(我运行了调试器),如何从此处获取要删除的文件路径。

当我可以使用循环来完成同样的事情时,我只是在使用中继器浪费我的时间吗?这将同样简单,只是 - 也许 - 不那么优雅?

与其他解决方案相比,使用中继器的真正优势是什么?

最佳答案

您绝对可以像您所显示的那样处理 LinkBut​​ton 事件。您可以像这样向 LinkBut​​ton 添加 CommandArgument:

<asp:LinkButton CommandArgument="<%# (string)Container.DataItem %>" ID="lbFileDelete" runat="server" Text="delete" CommandName="delete" />

然后在您的代码中您可以这样做:

string path = e.CommandArgument.ToString();

总的来说,我是 Repeater 控件的粉丝。它使您能够使用有限的代码和对生成的 HTML 的高度控制来快速制作重复的东西。与 GridView 和其他更复杂的控件相比,我更喜欢它,因为您可以更精确地根据需要生成输出。

我更喜欢它而不是循环,因为我相信如果你不在代码中附加大量 HTML 来生成生成的 HTML,你可以开发得更快,错误更少。

关于c# - ASP.NET 转发器问题(+关于最佳实践的问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/921688/

相关文章:

c# - 不检查浮点等式/不等式

c# - 如何在 .net 中生成 UTF-8 字符集中的所有字符

c# - 如何在 Blazor 中实现拖放?

c# - 在 ASP 中继器 C# 中显示/隐藏 div 标签

c# - 如何在 Repeater 中获取文字内容值

c# - 测量 RichTextBox 控件中的字符串

javascript - asp.net mvc 中的表单验证(使用 javascript )

c# - ASP.NET 无法使用 FtpWebRequest 类启用 SSL 而不会出现错误

asp.net - LINQ to SQL 执行时间比 SSMS SQL 长 50 倍

qt - QML:如何获取中继器的总高度?