gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:13:09 26 4
gpt4 key购买 nike

我是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com