如何在 C# 代码隐藏中仅为所选链接添加类

本文关键字:链接 添加 代码 隐藏 | 更新日期: 2023-09-27 18:31:39

我有一个名为"is-active"的类,它有一个彩色箭头,根据用户单击的链接从导航中伸出到主要内容中。该代码运行foreach并从数据库中提取所有类别。如何让"is-active"类仅针对当前链接显示?我知道它可以工作,因为我把它放在openList控件中并且它显示在所有五个类别上,我只是不知道如何让它只显示在选定的类别上。

我尝试附加 jQuery 来执行此操作,但添加linkbutton全部在代码中完成,所以我不确定如何附加两者。 这是唯一的方法还是有其他方法?

提前感谢您的帮助!

以下是我的类别和链接按钮代码:

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

如何在 C# 代码隐藏中仅为所选链接添加类

这很棘手,因为您的 response.redirect 在按钮单击处理程序中重新创建页面视图状态。这意味着您的页面将始终显示为新鲜页面,并且用户单击该链接的事实已丢失。

作为一种解决方法,您可以在 response.redirect 之前将链接 ID 放在会话变量中,然后在页面重新加载时调用它。然后,在循环中,如果会话变量与当前按钮匹配 instance.id 则将 cssclass 设置为"处于活动状态"。

请记住在将 cssclass 设置为 is-active 后也清除会话变量,以避免在其他页面中混淆。

此外,在将按钮添加到控件树后,您必须进行 ID 比较,因为这是系统自动生成 ID 的地方。如果你愿意,我可以给你一个完整的例子。

请记住,这是一种解决方法,最好采用不同的方法。我的意思是,如果您要使用 ispostback 包装器而不是重定向,那么在回发时,您可以更轻松地将 id 设置为 isactive。

如果您希望更加精通,页面生命周期对于了解 .net 非常重要,尤其是当您提到使用 ajax 更新面板时。阅读以下内容:http://msdn.microsoft.com/en-us/library/ms178472(VS.100).aspx 需要吸收的信息很多,所以也请将其收藏起来以供以后使用,因为您将经常使用它。