0

「is-active」というクラスがあり、ユーザーがクリックしたリンクに基づいて、ナビゲーションからメインコンテンツに突き出た色付きの矢印があります。コードは aforeachを実行し、データベースからすべてのカテゴリを取得します。「is-active」クラスを現在のリンクに対してのみ表示するにはどうすればよいですか? コントロールに入れてopenList5つのカテゴリすべてに表示されるので、機能することはわかっていますが、選択したカテゴリのみに表示する方法がわかりません。

私はそれを行うためにjQueryを添付しようとしましたが、追加linkbuttonはすべてコードビハインドで行われるため、2つを添付する方法がわかりません。これが唯一の方法ですか、それとも別の方法がありますか?

よろしくお願いします。

以下は、カテゴリとリンク ボタンのコードです。

protected override void CreateChildControls()
{
    LiteralControl openingDiv = new LiteralControl("<div id='MainPanel'>");
    LiteralControl closingDiv = new LiteralControl("</div>");   

    this.Controls.Add(openingDiv);

    foreach (DataRow dr in ds.Tables[0].Rows)
    {
        LiteralControl openList = new LiteralControl("<li class='" + dr["CategoryColor"].ToString() + "'>");
        LiteralControl closeList = new LiteralControl("</li>");                

        Label lblNumber = new Label();

        LinkButton myLinkButton = new LinkButton();

        myLinkButton.Text = "<span class='number'>" + dr["CategoryNumber"] + "</span>"+ dr["CategoryName"].ToString();
        myLinkButton.CommandArgument = dr["Category_ID"].ToString();
        myLinkButton.Click += myLinkButton_Click;

        this.Controls.Add(openList);
        this.Controls.Add(myLinkButton);
        this.Controls.Add(closeList);
    }
    this.Controls.Add(closingDiv);
}
void myLinkButton_Click(object sender, EventArgs e)
{
    LinkButton btn = (LinkButton)(sender);
    Session["CategoryID"] = btn.CommandArgument;

    Response.Redirect(Request.RawUrl);  
}
4

1 に答える 1

1

ページのビューステートを再作成するボタンクリックハンドラーでのresponse.redirectingのため、注意が必要です。これは、ページが常に新鮮に表示され、ユーザーがそのリンクをクリックしたという事実が失われることを意味します.

回避策として、response.redirect の前にセッション変数にリンク ID を配置し、ページのリロード時にそれを呼び出すことができます。次に、ループ内で、セッション変数が現在のボタン instance.id と一致する場合、cssclass を is-active に設定します。

他のページでの混乱を避けるために、cssclass を is-active に設定した後は、セッション変数もクリアすることを忘れないでください。

また、コントロール ツリーにボタンを追加した後、ID の比較を行う必要があります。これは、システムが自動的に ID を生成する場所だからです。必要に応じて、完全な例を挙げます。

これは回避策であり、別のアプローチが最適であることに注意してください。つまり、リダイレクトの代わりに ispostback ラッパーを使用すると、ポストバック時に ID を isactive に設定するのがはるかに簡単になるということです。

ページのライフサイクルは、特に ajax 更新パネルを使用していることに言及しているように、より熟練したい場合に .net を理解する上で重要です。これを読んでください:http://msdn.microsoft.com/en-us/library/ms178472(VS.100).aspx取り入れるべき情報がたくさんあるので、後でよく使うので、ブックマークしておいてください。

于 2013-09-18T17:51:59.750 に答える