Недавно я создал веб-элемент управления в asp.net, который представляет принтер.Пользовательский элемент управления содержит флажок, который я использую для установки свойства IsChecked:
protected bool isChecked;
/// <summary>
/// Is printer selected
/// </summary>
public bool IsChecked
{
get { return isChecked; }
set { isChecked = value; }
}
protected void chkIsSelected_CheckedChanged(object sender, EventArgs e)
{
if (isChecked)
{
isChecked = false;
}
else
{
isChecked = true;
}
}
Я хочу иметь возможность выбирать принтеры с помощью флажков (также для нескольких выборок) и использовать кнопку «Добавить выбранное», чтобы добавитьвыбранные «принтеры (пользовательские элементы управления)».
protected void btnSubmitSelection_Click(object sender, EventArgs e)
{
Dictionary<string, string> addResults = new Dictionary<string, string>();
foreach (PrinterControlSearch pctrl in printerControls)
{
if (pctrl.IsChecked)
{
addResults.Add(pctrl.printer.PrinterName, PrinterOperations.addPrinter(client, pctrl.printer));
}
}
}
Все работает нормально, если я добавляю веб-элементы управления в событиях Page_Init или Page_Load.События CheckedChanged запускаются по одному для каждого проверенного элемента управления после запуска обратной передачи с помощью кнопки AddSelected на главной странице, и свойство IsChecked устанавливается так, как должно быть для отмеченных флажков.
Однако, если я добавлювеб-элементы управления на странице с методом, который вызывается обратной передачей от кнопки поиска, например, элементы управления отображаются нормально, но события CheckedChanged никогда не срабатывают на обратной передаче AddSelected, а свойство IsChecked всегда ложно, поскольку оно никогда не устанавливается,CheckBox, который я использую, не вызывает AutoPostBack.
Почему это происходит и как я могу заставить его работать каждый раз?
Я полагаю, это как-то связано с ViewState элементов управления, но это не имеет особого смысла для меня, потому что даже если ядобавить элементы управления в событие Page_Load. Я не устанавливаю никаких свойств после метода container.AddControl () для ViewState, чтобы догнать жизненный цикл страницы, и событие CheckedChanged по-прежнему срабатывает.Спасибо