У меня есть приложение WebForms, которое создает на странице элементы динамического выбора. Я не знаю, сколько будет отображаться, потому что это зависит от количества записей в базе данных. Вот часть кода, который выполняется на странице_Load.WebForms: Справочное динамическое управление
foreach (int studioId in studioIds)
{
DataRow studio = DAL.Database.Object_Get(Database.ObjectType.Studio, studioId).Rows[0];
var studioName = studio["name"].ToString();
string literal = string.Format("<div class=\"form-group\">" +
"<label for=\"team_filter_{0}\" class=\"col-md-3 control-label text-nowrap\">{1}</label>" +
"<select id=\"team_filter_{0}\" class=\"col-md-9\" multiple=\"true\">" +
"<option value=\"studio_{0}\" data-type=\"studio\">All {1}</option>", studioId, studioName);
// ...
literal += "<optgroup label=\"Games\">";
literal += "<option value=\"game_0\" data-type=\"game\">All Games</option>";
literal += "</optgroup>";
literal += "</select>" +
"</div>";
filterselectors.Controls.Add(new LiteralControl(literal));
Если вы посмотрите на элемент выбора, сгенерировать идентификатор (т.е. team_filter_1, team_filter_2) и добавить первичный ключ записи базы данных.
На этой же странице у меня есть кнопка, которая вызывает следующий метод, который обрабатывает проверенные параметры из списка выбора (я использую плагин Multiselect для Bootstrap).
private bool GenerateFinancialReport()
{
HtmlSelect select = (HtmlSelect)Page.FindControl("team_filter_???");
QueryDropDown(select, DAL.Database.ObjectType.Game, out games, out gameNames);
// ...
}
У меня есть две проблемы, я должен ссылаться на все отдельные элементы, но я не знаю их идентификаторы. Во-вторых, я не думаю, что могу использовать метод FindControl, поскольку это не серверный элемент управления. Я попробовал жесткое кодирование «team_filter_1» в моем вызове FindControl, но переменная выбора всегда равна нулю.
Я также попытался использовать серверные элементы управления в коде, как показано ниже, но у меня по-прежнему возникает та же проблема. Я не могу ссылаться на выпадающие списки в отделенного кода, когда страница размещена назад:
foreach (int studioId in studioIds)
{
DataRow studio = DAL.Database.Object_Get(Database.ObjectType.Studio, studioId).Rows[0];
var studioName = studio["name"].ToString();
// Start
Panel formGroup = new Panel();
formGroup.Attributes.Add("class", "form-group");
Label label = new Label();
label.Attributes.Add("for", "team_filter_" + studioId);
label.Attributes.Add("class", "col-md-3 control-label text-nowrap");
label.Text = studioName;
HtmlSelect teamfilter = new HtmlSelect();
teamfilter.ID = "team_filter_" + studioId;
teamfilter.Attributes.Add("class", "col-md-9");
teamfilter.Attributes.Add("multiple", "true");
ListItem listItem = new ListItem("All " + studioName, "studio_" + studioId);
listItem.Attributes.Add("data-type", "studio");
teamfilter.Items.Add(listItem);
listItem = new ListItem("All Games", "game_0");
listItem.Attributes.Add("data-type", "game");
teamfilter.Items.Add(listItem);
formGroup.Controls.Add(label);
formGroup.Controls.Add(teamfilter);
filterselectors.Controls.Add(formGroup);
«Я не думаю, что я могу использовать метод FindControl, так как это не является элемент управления сервером.» Почему вы не используете (динамически создавать) серверные элементы управления? –
@ Возможно, вы просмотрели документацию вообще и пример в MSDN для 'HTMLSelect' [msdn HtmlSelect] (https://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlвыбрать (v = vs.110) .aspx) – MethodMan
Я думал об использовании серверного элемента управления, но я не знаю, как его поместить в div .form-group, как в коде выше. – Ray