如何在 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);
}
这很棘手,因为您的 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 需要吸收的信息很多,所以也请将其收藏起来以供以后使用,因为您将经常使用它。