添加 CSS 和 ListItem.Attributes.Add 不起作用

Adding CSS with ListItem.Attributes.Add does not work

我在 ajax ModalPopupExtender:

中有一个这样的函数
private void BindListBox()
{
  var obj;
  // some code to bind obj 
  ListItem x = new ListItem(obj);
  x.Attributes.Add("class", "headerStyle");
  lstListBox1.Items.Add(x);
}

我将此函数放入 OnPreRender 事件中,并使用代码初始化 bootstrap 日期选择器。由于某些原因,我必须在 OnPreRender

中初始化日期选择器
protected override void OnPreRender(EventArgs e)
{
   base.OnPreRender(e);

   String script = "$(document).ready(function() {$('#" + txtDate.ClientID + "').datepicker({format: 'dd-mm-yyyy',autoclose: true});});";
   ScriptManager.RegisterStartupScript(base.Page, base.Page.GetType(), String.Format("jQuery_{0}", txtDate.ClientID), script, true);        

   BindListBox();
}

执行代码后,不会使用 headerStyle class 属性生成列表框项目标记。它有文本和值,但没有 class 属性。

我了解到属性会在回发时丢失,但我认为添加 class 属性后我没有任何回发。我在ModalPopupExtender中的Page_Load是空的,而我在调用弹窗的ASPX中的Page_Load只有这段代码:

protected void Page_Load(object sender, EventArgs e)
    {
        Page.Header.DataBind();
        if (!IsPostBack)
        {                
            ModalPopupExtenderForm.Show();
        }
    }

我不确定问题出在哪里。

我尝试在 ASPX Page_Load 或模式弹出 Page_Load 中调用函数,但没有任何变化。

请指教。

因此,我无法找到根本原因。似乎 ASPX 生命周期的某些部分与我的 CSS 搞混了,我不知道是哪一部分搞砸了。我必须对此做一个乏味的解决方法。

1) 每次列表框绑定到它的数据源时,如果循环项是 header,我会将它推入一个字符串数组。

2) 列表框循环完成后,将字符串数组保存到ViewState

3) 创建一个将在 Page_Load

结束时调用的函数

4) 该函数将检索字符串数组 ViewState 中的每个 header 并执行 Attributes.Add()

我不认为这是一个明智的解决方案,但至少它对我有用。