0

我有一个名为“is-active”的类,它有一个彩色箭头,根据用户单击的链接从导航突出到主要内容。代码运行 aforeach并从数据库中提取所有类别。如何让“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);  
}
4

1 回答 1

1

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

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

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

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

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

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

于 2013-09-18T17:51:59.750 回答