如何为asp:下拉列表控件重用列表项

本文关键字:列表 控件 下拉列表 asp | 更新日期: 2023-09-27 18:01:23

我有一个.aspx页面,其中包含两个<asp:DropDownList>控件,其中填充了静态项目,如:

<asp:DropDownList ID="ddl1" ...>
    <asp:ListItem Value="A" Text="..." />
    <asp:ListItem Value="B" Text="..." />
    ....
    <asp:ListItem Value="X" Text="..." />
</asp:DropDownList>
.....
<asp:DropDownList ID="ddl2" ...>
    <asp:ListItem Value="A" Text="..." />
    <asp:ListItem Value="B" Text="..." />
    ....
    <asp:ListItem Value="X" Text="..." />
</asp:DropDownList>

ddl1ddl2的列表项相同。因此,我希望重用它们并删除重复。

我可以在。aspx.cs后面的代码中填充组合,但我真的不想有一些愚蠢的数据在那里填充普通组合。我只需要页面的逻辑。

是否有办法在.aspx内部重新发布列表项?

如何为asp:下拉列表控件重用列表项

创建一个类来表示DDL中的数据,然后调用get方法。对两个DDL使用相同的ObjectDataSource,或者使用单独的ObjectDataSource。您可以优化类以使用静态成员,但这样做可能有些多余。

这个策略将来会很好地重构成一个db调用…

在Web表单中:

<asp:ObjectDataSource ID="obj1" runat="server"
    TypeName="WebApplication1.Data.MyDdlItem"
    SelectMethod = "GetAll" />
<asp:DropDownList ID="ddl1" runat="server" DataSourceID="obj1" DataTextField="Name" DataValueField="Id" />
<asp:DropDownList ID="ddl2" runat="server" DataSourceID="obj1" DataTextField="Name" DataValueField="Id" />

对应的Object:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication1.Data
{
    public class MyDdlItem
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public static List<MyDdlItem> GetAll()
        {
            List<MyDdlItem> list = new List<MyDdlItem>();
            list.Add(new MyDdlItem { Id = "1", Name = "Option 1" });
            list.Add(new MyDdlItem { Id = "2", Name = "Option 2" });
            list.Add(new MyDdlItem { Id = "3", Name = "Option 3" });
            list.Add(new MyDdlItem { Id = "4", Name = "Option 4" });
            return list;
        }
    }
}

只需创建一个数据表,并将两个下拉列表与同一个数据表绑定。

为什么不使用Java脚本数组稍后将它们绑定到两个下拉列表?

<script>
  var arr = new Array(new Array('A','value1'),new Array('B','value2'),new Array('C','value3'));
var elem = document.getElementById("ddl1");
var elem1 = document.getElementById("ddl2");
 for(i=0;i<arr.length;i++)
 {
    elem.add(new Option(arr[i][0, 1], arr[i][0, 0]),false);
    elem1.add(new Option(arr[i][0, 1], arr[i][0, 0]),false);
 }
</script>

试试ddl2.DataSource=ddl1.DataSource,然后一旦ddl1有了所有的项目,ddl2也应该有。