На одной из наших страниц есть раскрывающийся список, который динамически раскрашивает его элементы при предварительном рендеринге. Тем не менее, всякий раз, когда есть какой-либо элемент управления ajax на любом из элементов управления на странице, он сразу же теряет все свои стили (цвета элементов). Я могу сказать, что предварительная рендер получает вызов как при загрузке страницы, так и при каждом вызове ajax.Выпадающий список, теряющий стиль, когда появляется ajax post back
<asp:DropDownList ID="DeviceObjectDDL" runat="server" Style="width: 350px;" OnPreRender="ColorDeviceListItems" AutoPostBack="true" OnSelectedIndexChanged="DeviceObjectDDL_SelectedIndexChanged" />
И
protected void ColorDeviceListItems(object sender, EventArgs e)
{
if (((DropDownList) sender).DataSource == null) return;
var disabledList = ((List<Device>) ((DropDownList) sender).DataSource).FindAll(d => !d.Active || !d.Visible);
foreach (var device in disabledList)
{
var item = ((DropDownList) sender).Items.FindByValue(device.ID.ToString());
if (item == null) continue;
if ((!device.Active) && (!device.Visible))
item.Attributes.CssStyle.Add("color", "Purple");
else
{
if (!device.Active)
item.Attributes.CssStyle.Add("color", "Blue");
if (!device.Visible)
item.Attributes.CssStyle.Add("color", "#8B0000");
}
}
}
Когда метод ColorDeviceListItems
вызывается во время AJAX запросов, то sender
DataSource равно нулю, поэтому он просто возвращает.
Поместите точку останова в обработчик события OnSelectedIndexChanged, возможно, это срабатывает и потенциально удаляет стили? –
Нет, ничего не стреляет. –
Я думаю, что я смог ответить на него, см. Ниже ... спасибо –