我有一个名为“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);
}
答案 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它需要提供大量信息,因此您也可以将其加入书签,因为您将大量使用它。