Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何重用asp:DropDownList控件的列表项?_C#_Asp.net_Webforms_Drop Down Menu_Code Reuse - Fatal编程技术网

C# 如何重用asp:DropDownList控件的列表项?

C# 如何重用asp:DropDownList控件的列表项?,c#,asp.net,webforms,drop-down-menu,code-reuse,C#,Asp.net,Webforms,Drop Down Menu,Code Reuse,我有一个.aspx页面,其中包含两个控件,其中填充了如下静态项: <asp:DropDownList ID="ddl1" ...> <asp:ListItem Value="A" Text="..." /> <asp:ListItem Value="B" Text="..." /> .... <asp:ListItem Value="X" Text="..." /> </asp:DropDownList>

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

<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中的列表项?

只需创建一个datatable并将两个下拉列表绑定到同一个datatable。

以后为什么不使用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>

var arr=新数组(新数组('A','value1')、新数组('B','value2')、新数组('C','value3');
var elem=document.getElementById(“ddl1”);
var elem1=document.getElementById(“ddl2”);

对于(i=0;i尝试类似于
ddl2.DataSource=ddl1.DataSource
的方法,然后一旦ddl1有了它的所有项,ddl2也应该这样做。

创建一个类来表示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" />
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;
        }
    }
}

对应的对象:

<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" />
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;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
命名空间WebApplication1.Data
{
公共类myddleItem
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
公共静态列表GetAll()
{
列表=新列表();
添加(新的MyDdlItem{Id=“1”,Name=“Option 1”});
添加(新的MyDdlItem{Id=“2”,Name=“Option 2”});
添加(新的MyDdlItem{Id=“3”,Name=“Option 3”});
添加(新的MyDdlItem{Id=“4”,Name=“Option 4”});
退货清单;
}
}
}

因为这会导致其他问题(),我不需要胡塞尔