![](/img/trans.png)
[英]How to validate dropdown list populated from SQL in asp.net (UnobtrusiveValidationMode) error
[英]How do I remove duplicates from an asp.net dropdown list being populated by files names from a directory?
我有一个asp.net C#Webform项目。 我创建了一个绑定到本地上载目录的下拉列表。 该目录包含视频文件。 每个视频都有3个文件扩展名(mp4,ogv和webm)。 我只希望每个文件名之一出现在列表中而没有扩展名。 目前,我的下拉列表如下所示:
video-1.mp4
video-1.ogv
video-1.webm
video-2.mp4
video-2.ogv
video-2.webm
我希望列表看起来像这样:
video-1
video-2
这是我的代码背后:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
if (!IsPostBack)
{
string[] filePaths = Directory.GetFiles(Server.MapPath("~/Uploads/"));
List<ListItem> files = new List<ListItem>();
foreach (string filePath in filePaths)
{
var item = new ListItem(Path.GetFileNameWithoutExtension(filePath), filePath);
if (!files.Contains(item))
files.Add(new ListItem(Path.GetFileName(filePath), filePath));
}
DropDownList1.DataSource = files;
DropDownList1.DataTextField = "";
DropDownList1.DataValueField = "";
DropDownList1.DataBind();
}
}
protected void BindGrid()
{
string[] filePaths = Directory.GetFiles(Server.MapPath("~/Uploads/"));
List<ListItem> files = new List<ListItem>();
foreach (string filePath in filePaths)
{
files.Add(new ListItem(Path.GetFileName(filePath), filePath));
}
GridView1.DataSource = files;
GridView1.DataBind();
}
这就是我当前的下拉列表。 我要删除重复项。
一些伪代码(充实它/使其成为现实,这是张贴者(您)自己做的一项工作):
protected void BindGrid()
{
string[] filePaths = Directory.GetFiles(Server.MapPath("~/Uploads/"));
List<ListItem> files = new List<ListItem>();
foreach (string filePath in filePaths)
{
int dotPos = filePath.IndexOf('.');
String sansExt = filePath.Substring(1, dotPos);
if (!files.Contains[sansExt]
{
files.Add(new ListItem(Path.GetFileName(filePath), filePath));
}
}
GridView1.DataSource = files;
GridView1.DataBind();
}
IOW,找到“点”在哪里; 通过从开头复制到该位置来删除扩展名。 查看它是否已经在通用字符串列表中; 如果不是,则添加它。 确保“。” 包含在要搜索通用列表的字符串中,因此只有全名匹配(而不是一部分)。
您需要在构建列表或输出时对它们进行排序...
在输出中:
GridView1.DataSource = files.Select(x => x.Text.Split('.')[0]).Distinct();
使用LinqPad:
在列表建筑物中,甚至可以使用GetFileNameWithoutExtension
foreach (string filePath in filePaths)
{
var name = filePath.Split('.')[0];
var item = new ListItem(name);
if (!files.Contains(item))
files.Add(item);
}
使用LinqPad:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.