Ваша проблема в том, что ViewState кнопок ссылки сохраняется непосредственно перед визуализацией элементов управления, включая обновленный стиль. Затем на обратной передаче после Page_Init ViewState повторно применяется к каждому элементу управления с оранжевым стилем. Это переопределяет параметр, который вы добавляете в Page_Init. Таким образом, в Page_Load вам необходимо сбросить стилизацию для каждого из элементов управления.
Добавить другой стиль в таблицу стилей
.highlighted { color:orange; }
В lbtnCharacter_Command замените
lbtn.ForeColor = System.Drawing.Color.Orange;
с
lbtn.CssClass = "firstCharacter highlighted ";
В Page_Load добавить:
foreach (var ctrl in divAlphabets.Controls)
{
if (ctrl is LinkButton)
((LinkButton)ctrl).CssClass = "firstCharacter";
}
На каждом Page_Load все классы ссылок css будут сброшены к значениям по умолчанию. Это после того, как ViewState был применен к ним (между PageInit и PageLoad). Затем в событии Command к нажатой кнопке будет добавлен новый стиль. Настройка цвета в этом стиле переопределит любую настройку цвета в стиле firstCharacter.
UPDATE
protected void Page_Init(object sender, EventArgs e) {
for (char asciiValue = 'A'; asciiValue <= 'Z'; asciiValue++) {
var lbtnCharacter = new LinkButton {
ID = "lbtnCharacter" + asciiValue,
Text = Convert.ToString(asciiValue),
ToolTip = "Show users whose name starts with '" + Convert.ToString(asciiValue) + "'",
CommandArgument = Convert.ToString(asciiValue)
};
lbtnCharacter.Command += lbtnCharacter_Command;
divAlphabets.Controls.Add(lbtnCharacter);
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (Session["CurrentLetter"] != null) {
foreach (var ctrl in divAlphabets.Controls) {
if (ctrl is LinkButton) {
if (((LinkButton) ctrl).Text == Session["CurrentLetter"].ToString()) {
((LinkButton) ctrl).CssClass = "firstCharacter highlighted";
}
}
}
}
}
void lbtnCharacter_Command(object sender, CommandEventArgs e) {
//Reset all of the other buttons only when clicking a new one
foreach (var ctrl in divAlphabets.Controls) {
if (ctrl is LinkButton) {
((LinkButton) ctrl).CssClass = "firstCharacter";
}
}
//Set the clicked button and save the Session state
var lbtn = (LinkButton)divAlphabets.FindControl("lbtnCharacter" + e.CommandArgument);
lbtn.CssClass = "firstCharacter highlighted";
Session["CurrentLetter"] = lbtn.Text;
}