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

时间:2013-09-16 15:15:26

标签: c# html css

我有一个名为“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);  
}

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

如果您希望更精通,页面生命周期是一个重要的事情,尤其是当您提到您使用ajax更新面板时。 请阅读此内容:http://msdn.microsoft.com/en-us/library/ms178472(VS.100).aspx它需要提供大量信息,因此您也可以将其加入书签,因为您将大量使用它。