如何为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>
ddl1
和ddl2
的列表项相同。因此,我希望重用它们并删除重复。
我可以在。aspx.cs后面的代码中填充组合,但我真的不想有一些愚蠢的数据在那里填充普通组合。我只需要页面的逻辑。
是否有办法在.aspx内部重新发布列表项?
创建一个类来表示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也应该有。