如何获取动态创建的DropDownLists的顺序

时间:2012-04-11 13:07:49

标签: c# javascript asp.net

我使用JavaScript,ASP.NET创建了一些下拉列表。

用户可以通过单击“+”按钮添加任意数量的下拉列表,然后单击“ - ”按钮将其删除。

如果很难理解我的意思请参阅“How to implement a list of dropboxes in C#”。

现在我想实现后面的代码,并希望定义下拉列表的顺序,但我不知道哪一个是我的第一个下拉列表等。

我们假设所有<asp:DropDownList>包含以下列表元素:method1,method2,method3和method4。如果用户选择元素,则实现代码隐藏中的方法。

实施例: dropboxlist1:选择列表项method2,
dropboxlist2:选择列表项method1,
dropboxlist3:选择列表项method3,

string txt= "";
if (dropboxlistID.Text == "method1"){
  txt = method1Imp();
} else if (dropboxlistID.Text == "method2") {
  txt = method2Imp();
} else if (dropboxlistID.Text == "method3") {
  txt = method3Imp();
} else {
}

但此时此刻我不知道哪个下拉列表首先出现,哪个方法应首先在我的字符串上执行。

3 个答案:

答案 0 :(得分:2)

尝试将每个方法作为委托排入队列,然后在从单个线程准备好后排空(调用每个委托)队列。这将确保执行顺序与用户选择的顺序相匹配。

抱歉,我没有初步包含代码。这是一个帮助您入门的基本示例:

Queue<Func<string>> actions = new Queue<Func<string>>();
if(dropboxListID.Text =="m1")
{
 actions.Enqueue(method1Imp);
}
if(dropboxListID.Text = "m2")
{
 action.Enqueue(method2Imp);
}

...
Sometime Later when you're ready to process these
...
string txt = "";    
while(actions.Count >0)
{
 var method = actions.Dequeue();
 txt = method();
}

这是一篇博文,深入探讨了工作/任务队列的概念:

http://yacsharpblog.blogspot.com/2008/09/simple-task-queue.html

答案 1 :(得分:0)

IMO您的下拉列表将包含在父级中。

让我们说(根据您的链接)您的父母是DropDownPlaceholder。

<div id="DropDownPlaceholder">

使用linq获取所有孩子。将它们作为下拉列表投射,然后您可以循环查找它们。

答案 2 :(得分:0)

获取下拉列表的顺序:

  1. 首先在 aspx page 中设置硬编码下拉列表的ID / ClientID 统计他们(比如2个下拉列表)
  2. 在动态创建下拉列表时,在中添加一个计数整数 ID / ClientID的结尾,如ddl3,ddl4(从3开始计数)
  3. 然后在您的代码中,您可以找到所选元素的下拉列表:

    if (ddl.ClientID.EndsWith("1")){
      // 1st ddl
    } else if (ddl.ClientID.EndsWith("2")) {
      // 2nd ddl
    } else if (ddl.ClientID.EndsWith("3")) {
      // 3rd ddl
    }
    ...