Я создал следующий пользовательский элемент управления и установил выбранное значение при нажатии элемента списка маркеров.
Моя проблема в том, что мне нужно установить класс css (SetSelected ()) после обратной передачи, но он всегда выбирает предыдущую запись в состоянии просмотра, а не собирает новое значение.
Не думаю, что мне следует использовать PageLoad для установки класса CSS, но я не уверен, где это лучше всего сделать.
Может кто-нибудь помочь, пожалуйста?
[DefaultProperty("SelectedValue"),
ToolboxData("<{0}:GlossaryList runat=\"server\" />")]
public class GlossaryList : WebControl
{
const string MANAGEDMETADATASERVICE = "Managed Metadata Service";
const string TOYOTA = "Toyota";
BulletedList _bulletList = new BulletedList();
public String SelectedText
{
get
{
object selectedText = ViewState["SelectedText"];
return (selectedText == null) ? String.Empty : (string)selectedText;
}
set
{
ViewState["SelectedText"] = value;
}
}
public String SelectedValue
{
get
{
object selectedValue = ViewState["SelectedValue"];
return (selectedValue == null) ? String.Empty : (string)selectedValue;
}
set
{
ViewState["SelectedValue"] = value;
}
}
protected override void OnInit(EventArgs e)
{
CreateBulletedList();
base.OnInit(e);
}
protected override void OnLoad(EventArgs e)
{
if (this.Page.IsPostBack)
{
SetSelected();
}
base.OnLoad(e);
}
private void SetSelected()
{
//if(this.Controls != null && this.Controls.Count > 0)
//{
// foreach (ListItem listItem in ((BulletedList)this.Controls[0]).Items)
// {
// if (listItem.Value == SelectedValue)
// {
// listItem.Attributes.Add("class", "active");
// }
// }
//}
}
protected void CreateBulletedList()
{
_bulletList.Click += new BulletedListEventHandler(BulletListItem_Click);
_bulletList.DisplayMode = BulletedListDisplayMode.LinkButton;
_bulletList.CssClass = "letter-selector";
for (char c = 'A'; c <= 'Z'; c++)
{
ListItem listItem = new ListItem();
listItem.Text = c.ToString();
listItem.Value = c.ToString();
if (SelectedValue == c.ToString())
{
listItem.Attributes.Add("class", "active");
}
_bulletList.Items.Add(listItem);
}
if (!this.Page.IsPostBack)
{
_bulletList.Items[0].Selected = true;
_bulletList.Items[0].Attributes.Add("class", "active");
}
this.Controls.Add(_bulletList);
}
private void BulletListItem_Click(object sender, BulletedListEventArgs e)
{
SelectedValue = SelectedText = _bulletList.Items[e.Index].Value;
SetActive(e.Index);
}
private void SetActive(int index)
{
if (this.Controls != null && ((BulletedList)this.Controls[0]).Items.Count > 0)
{
foreach (ListItem listItem in ((BulletedList)this.Controls[0]).Items)
{
listItem.Attributes.Clear();
}
}
((BulletedList)this.Controls[0]).Items[index].Attributes.Add("class", "active");
}
}