Как получить идентификаторы многих DropDownList на странице aspx в коллекции?Проблема DropDownList в Asp.net
DropDownList ddl = new DropDownList();
string s=ddl.ID;
List<string> li = new List<string>();
li.Add(s);
Как получить идентификаторы многих DropDownList на странице aspx в коллекции?Проблема DropDownList в Asp.net
DropDownList ddl = new DropDownList();
string s=ddl.ID;
List<string> li = new List<string>();
li.Add(s);
Основываясь на комментарий на другой вопрос, я понимаю ваш вопрос в том, что вы добавили элементы управления на странице, и теперь вы хотите прочитать их все. Для этого вам нужно рекурсивно прочитать все элементы управления на странице и найти те, которые типа 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;
}
Можете ли вы сказать мне, как получить идентификаторы существующих DDLS внутри списка? Предположим, что имеется 100 DDLS
У вас есть несколько вариантов ...
Controls
сбора и испытания, если каждый элемент имеет тип DropDownList
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);
спасибо ... Я выбираю второй вариант, и я могу подсчитать общее количество элементов управления, но не могу получить DDLs. – user2096592
@ user2096592: Как указано в ответе, второй вариант - наименее надежный *. Он будет «работать» в том смысле, что вы можете получить идентификаторы «ID» от непосредственных дочерних элементов коллекции «Controls», но не слишком надежны для более сложных иерархий управления. Я по-прежнему рекомендую либо первый вариант, если вам нужно только запрашивать значения один или третий вариант, если вам нужно многократно запрашивать значения. – David
Это не ясно, что вы имеете в виду. Кажется, что ваш код успешно добавляет элемент в список. Что вы пытаетесь сделать, это не работает? – David
Я хочу получить все идентификаторы DropDownLists внутри списка (коллекции). Этот код не работает. Получение нулевого значения в конце. – user2096592
Вы создаете новый DropDownList и извлекаете свойство ID (которое на данный момент будет пустым). Что ты пытаешься сделать? Вы хотите узнать идентификаторы некоторых существующих DDL? –