【发布时间】:2016-03-06 19:54:16
【问题描述】:
在我们的一个页面上,有一个下拉列表,可以在预渲染时动态为其项目着色。但是,每当页面上的任何控件进行 ajax 回发时,它都会立即失去其所有样式(项目颜色)。我可以看出,在页面最初加载时以及每次进行任何 ajax 调用时都会调用预渲染。
<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");
}
}
}
在 ajax 请求期间调用ColorDeviceListItems 方法时,sender 数据源为空,因此它只是返回。
【问题讨论】:
-
在您的 OnSelectedIndexChanged 事件处理程序中放置一个断点,它可能会触发并可能删除样式?
-
不,什么都没有。
-
我想我能够回答它,见下文...谢谢