2014-09-30 5 views
-1

Как получить идентификаторы многих DropDownList на странице aspx в коллекции?Проблема DropDownList в Asp.net

DropDownList ddl = new DropDownList(); 
    string s=ddl.ID; 
    List<string> li = new List<string>(); 
    li.Add(s); 
+0

Это не ясно, что вы имеете в виду. Кажется, что ваш код успешно добавляет элемент в список. Что вы пытаетесь сделать, это не работает? – David

+0

Я хочу получить все идентификаторы DropDownLists внутри списка (коллекции). Этот код не работает. Получение нулевого значения в конце. – user2096592

+0

Вы создаете новый DropDownList и извлекаете свойство ID (которое на данный момент будет пустым). Что ты пытаешься сделать? Вы хотите узнать идентификаторы некоторых существующих DDL? –

ответ

0

Основываясь на комментарий на другой вопрос, я понимаю ваш вопрос в том, что вы добавили элементы управления на странице, и теперь вы хотите прочитать их все. Для этого вам нужно рекурсивно прочитать все элементы управления на странице и найти те, которые типа DropDownList, что-то немного напоминает следующее:

protected void Page_Load(object sender, EventArgs e) 
{ 
    var dropdownListIds = new List<string>(); 
    var allControls = GetControlsRecursively(this); 
    foreach (var ctrl in allControls) 
    { 
     var ddl = ctrl as DropDownList; 
     if (ddl != null) 
     { 
      dropdownListIds.Add(ddl.ID); 
     } 
    } 
} 

private List<Control> GetControlsRecursively(Control parent) 
{ 
    var allControls = new List<Control>(); 
    foreach (Control child in parent.Controls) 
    { 
     allControls.Add(child); 
     allControls.AddRange(GetControlsRecursively(child)); 
    } 
    return allControls; 
} 
0

Можете ли вы сказать мне, как получить идентификаторы существующих DDLS внутри списка? Предположим, что имеется 100 DDLS

У вас есть несколько вариантов ...

  1. Получить идентификатор каждого элемента управления индивидуально
  2. Loop через Controls сбора и испытания, если каждый элемент имеет тип DropDownList
  3. Хранить элементы управления в коллекции и выберите идентификаторы из этой коллекции

Th е первый вариант является наиболее простым, и если у вас есть только сделать это один раз, то это, вероятно, самый простой:

var list = new List<string>(); 
list.Add(dropDownList1.ID); 
list.Add(dropDownList2.ID); 
list.Add(dropDownList3.ID); 
list.Add(dropDownList4.ID); 
// etc... 

Второй вариант является наименее код, но и наименее надежны. Это может выглядеть примерно так:

var list = new List<string>(); 
foreach (var control in Controls) 
    if (control is DropDownList) 
     list.Add((control as DropDownList).ID); 

Однако это только получить контроль, которые являются непосредственными элементами Controls коллекции. Если какой-либо из них вложен внутри других элементов управления, это может не найти их. Вы можете сделать это более рекурсивным, чтобы решить это, но это только сделает его более хрупким и подверженным ошибкам, скорее всего.

Третий вариант, вероятно, лучший, если вы будете многократно запрашивать список из DropDownList элементов управления. То, что вы в основном делаете здесь, статически создает список ваших элементов управления на уровне класса для страницы. Что-то вроде этого:

private List<DropDownList> MyDropDownLists { get; set; } 

// the page constructor 
public MyPage() 
{ 
    MyDropDownLists.Add(dropDownList1); 
    MyDropDownLists.Add(dropDownList2); 
    MyDropDownLists.Add(dropDownList3); 
    MyDropDownLists.Add(dropDownList4); 
    // etc... 
    // You might even extract all of this into a CollectDropDownLists function 
} 

Тогда в любое время вы должны запросить этот список, вы можете сделать это легко:

var listOfIDs = MyDropDownLists.Select(d => d.ID); 
+0

спасибо ... Я выбираю второй вариант, и я могу подсчитать общее количество элементов управления, но не могу получить DDLs. – user2096592

+0

@ user2096592: Как указано в ответе, второй вариант - наименее надежный *. Он будет «работать» в том смысле, что вы можете получить идентификаторы «ID» от непосредственных дочерних элементов коллекции «Controls», но не слишком надежны для более сложных иерархий управления. Я по-прежнему рекомендую либо первый вариант, если вам нужно только запрашивать значения один или третий вариант, если вам нужно многократно запрашивать значения. – David