2

我正在使用一系列链接按钮 Az,它们是动态创建的,单击每个按钮时我想要的内容将其文本颜色更改为其他内容,以使其与我正在做的其他内容不同

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();
    }

它工作正常,但是单击多个按钮时,所有单击的按钮都会将颜色更改为橙​​色,但我想要的是我单击的任何按钮,仅该按钮颜色应在单击下一个按钮时更改,上一个按钮应进入默认状态是这种方法对或告诉我是否可以通过css实现

4

1 回答 1

2

您的问题是链接按钮的 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 样式中的任何颜色设置。

更新

    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;
    }
于 2010-08-06T08:43:23.340 回答