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で、すべてのlinkbuttonscssクラスがデフォルトにリセットされます。これは、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 に答える