Asp.net 更改特定链接按钮的颜色

Asp.net 更改特定链接按钮的颜色,asp.net,linkbutton,Asp.net,Linkbutton,我正在使用一系列的链接按钮a-z,它们是动态创建的,我想在点击每个按钮时,它们的文本颜色会改变为其他颜色,以使其与我正在做的其他按钮不同 protected void Page_Init(object sender, EventArgs e) { // Adding Dynamically linkbuttons for all alphabets(i.e. A-Z) for (char asciiValue = 'A'; asciiValue <=

我正在使用一系列的链接按钮a-z,它们是动态创建的,我想在点击每个按钮时,它们的文本颜色会改变为其他颜色,以使其与我正在做的其他按钮不同

protected void Page_Init(object sender, EventArgs e)
    {
        // Adding Dynamically linkbuttons for all alphabets(i.e. A-Z)
        for (char asciiValue = 'A'; asciiValue <= 'Z'; asciiValue++)
        {
            LinkButton lbtnCharacter = new LinkButton();
            lbtnCharacter.ID = "lbtnCharacter" + asciiValue;
            divAlphabets.Controls.Add(lbtnCharacter);

            lbtnCharacter.Text = Convert.ToString(asciiValue);
            lbtnCharacter.CssClass = "firstCharacter";
            lbtnCharacter.ToolTip = "Show users whose name starts with '" + Convert.ToString(asciiValue) + "'";
            lbtnCharacter.CommandArgument = Convert.ToString(asciiValue);
            lbtnCharacter.Command += new CommandEventHandler(lbtnCharacter_Command);
        }
    }
void lbtnCharacter_Command(object sender, CommandEventArgs e)
    {
        ViewState["Selected_Character"] = e.CommandArgument;
        LinkButton lbtn = (LinkButton)divAlphabets.FindControl("lbtnCharacter" + e.CommandArgument);
        lbtn.ForeColor = System.Drawing.Color.Orange;
        txtNameFilter.Text = string.Empty;
        BindUserList();
    }
受保护的无效页\u Init(对象发送方,事件参数e)
{
//为所有字母(即A-Z)添加动态链接按钮

对于(char ascivalue='A';ascivalue您的问题是,链接按钮的ViewState在呈现控件(包括更新的样式)之前被保存。然后,在回发时,在Page_Init之后,ViewState将以橙色样式重新应用于每个控件。这将覆盖您在Page_Init中添加的设置。因此,在p加载时,需要重置每个控件上的样式

向样式表中添加其他样式

.highlighted { color:orange; }
在lbtnu命令中,替换

lbtn.ForeColor = System.Drawing.Color.Orange;

在页面加载中,添加:

foreach (var ctrl in divAlphabets.Controls)
{
    if (ctrl is LinkButton)
        ((LinkButton)ctrl).CssClass = "firstCharacter";
}
在每次页面加载时,所有linkbuttons css类都将重置为默认值。这是在ViewState应用于它们之后(在PageInit和PageLoad之间)。然后在命令事件中,单击的按钮将附加新样式。此样式中的颜色设置将覆盖第一个字符样式中的任何颜色设置

更新

    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;
    }
受保护的无效页\u Init(对象发送方,事件参数e){

for(char ascivalue='A';ascivalue Daniel抱歉,我遇到了一个新问题,因为此筛选器正在筛选用户名并在列表视图中显示它(假设我按“S”)有很多同名用户通过点击datapager页码进入下一页突出显示的颜色丢失了,你能帮助我吗?在这种情况下,你可能需要将当前选定的字母存储在会话中。请参阅我的更新答案。将其放入新的测试页中,看看它是如何工作的。
    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;
    }