您好我创建了一个服务器控件,其中包含 <UL>
及其 <LI>
我只想在所有六页中重复使用我的菜单
以下是控制代码
Asp代码
<%@ Control Language="C#" ClassName="Menu" %>
<ul id="ulSideBar" class="nav nav-list" runat="server">
<li accesskey="1" id="liDefault" runat="server" **class="active"**>
<asp:LinkButton runat="server" ID="lnkDefault" OnClick="lnkDefault_Click">Introduction</asp:LinkButton></li>
<li accesskey="2" id="liSquad" runat="server">
<asp:LinkButton runat="server" ID="lnkSquad" OnClick="lnkSquad_Click">Squad</asp:LinkButton>
</li>
<li accesskey="3" id="liGallery" runat="server">
<asp:LinkButton runat="server" ID="lnkGallery" OnClick="lnkGallery_Click">Gallery</asp:LinkButton>
</li>
<li accesskey="4" id="liMatches" runat="server">
<asp:LinkButton runat="server" ID="lnkMatches" OnClick="lnkMatches_Click">Matches</asp:LinkButton>
</li>
<li accesskey="5" id="liActivities" runat="server">
<asp:LinkButton runat="server" ID="lnkActivities" OnClick="lnkActivities_Click">Activities</asp:LinkButton>
</li>
<li accesskey="6" id="liNewsFeed" runat="server">
<asp:LinkButton runat="server" ID="lnkNewsFeed" OnClick="lnkNewsFeed_Click">News Feed</asp:LinkButton>
</li>
</ul>
我在六页中使用此控件现在我的问题是如何更改 class = active ,无论哪个 <li>
我点击,只能通过服务器端< / p>
我在Control的代码隐藏中尝试过这段代码,但它无效
protected void lnkDefault_Click(object sender, EventArgs e)
{
liDefault.Attributes.Add("class", "active");
liSquad.Attributes.Remove("class");
liGallery.Attributes.Remove("class");
liMatches.Attributes.Remove("class");
liActivities.Attributes.Remove("class");
liNewsFeed.Attributes.Remove("class");
Response.Redirect("Default.aspx");
}
protected void lnkSquad_Click(object sender, EventArgs e)
{
liDefault.Attributes.Remove("class");
liSquad.Attributes.Add("class", "active");
liGallery.Attributes.Remove("class");
liMatches.Attributes.Remove("class");
liActivities.Attributes.Remove("class");
liNewsFeed.Attributes.Remove("class");
Response.Redirect("Squad.aspx");
}
protected void lnkGallery_Click(object sender, EventArgs e)
{
liSquad.Attributes.Remove("class");
liDefault.Attributes.Remove("class");
liGallery.Attributes.Add("class", "active");
liMatches.Attributes.Remove("class");
liActivities.Attributes.Remove("class");
liNewsFeed.Attributes.Remove("class");
Response.Redirect("Gallery.aspx");
}
protected void lnkMatches_Click(object sender, EventArgs e)
{
liDefault.Attributes.Remove("class");
liSquad.Attributes.Remove("class");
liGallery.Attributes.Remove("class");
liMatches.Attributes.Add("class", "active");
liActivities.Attributes.Remove("class");
liNewsFeed.Attributes.Remove("class");
Response.Redirect("Matches.aspx");
}
protected void lnkActivities_Click(object sender, EventArgs e)
{
liDefault.Attributes.Remove("class");
liSquad.Attributes.Remove("class");
liGallery.Attributes.Remove("class");
liMatches.Attributes.Remove("class");
liActivities.Attributes.Add("class", "active");
liNewsFeed.Attributes.Remove("class");
Response.Redirect("Activities.aspx");
}
protected void lnkNewsFeed_Click(object sender, EventArgs e)
{
liDefault.Attributes.Remove("class");
liSquad.Attributes.Add("class", "active");
liGallery.Attributes.Remove("class");
liMatches.Attributes.Remove("class");
liActivities.Attributes.Remove("class");
liNewsFeed.Attributes.Add("class", "active");
Response.Redirect("NewsFeed.aspx");
}
答案 0 :(得分:3)
这解决了我的问题。我的问题是我使用的是<ul>
<li>
的自定义控件,但是使用控件的页面有问题,即当用户点击li时,它应该将其类更改为活动状态(class ='active')但由于回帖,它没有改变
可能如果其他人有这个问题可以使用我的解决方案。我在自定义控件代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// switch (Parent.TemplateControl.AppRelativeVirtualPath.Replace("~/Teams/", ""))
switch (System.IO.Path.GetFileName(Page.Request.Path))
{
case "Default.aspx":
liDefault.Attributes.Add("class", "active");
liSquad.Attributes.Remove("class");
liGallery.Attributes.Remove("class");
liMatches.Attributes.Remove("class");
liActivities.Attributes.Remove("class");
liNewsFeed.Attributes.Remove("class");
break;
case "Squad.aspx":
liDefault.Attributes.Remove("class");
liSquad.Attributes.Add("class", "active");
liGallery.Attributes.Remove("class");
liMatches.Attributes.Remove("class");
liActivities.Attributes.Remove("class");
liNewsFeed.Attributes.Remove("class");
break;
case "Gallery.aspx":
liSquad.Attributes.Remove("class");
liDefault.Attributes.Remove("class");
liGallery.Attributes.Add("class", "active");
liMatches.Attributes.Remove("class");
liActivities.Attributes.Remove("class");
liNewsFeed.Attributes.Remove("class");
break;
case "Matches.aspx":
liDefault.Attributes.Remove("class");
liSquad.Attributes.Remove("class");
liGallery.Attributes.Remove("class");
liMatches.Attributes.Add("class", "active");
liActivities.Attributes.Remove("class");
liNewsFeed.Attributes.Remove("class");
break;
case "Activities.aspx":
liDefault.Attributes.Remove("class");
liSquad.Attributes.Remove("class");
liGallery.Attributes.Remove("class");
liMatches.Attributes.Remove("class");
liActivities.Attributes.Add("class", "active");
liNewsFeed.Attributes.Remove("class");
break;
case "NewsFeed.aspx":
liDefault.Attributes.Remove("class");
liSquad.Attributes.Remove("class");
liGallery.Attributes.Remove("class");
liMatches.Attributes.Remove("class");
liActivities.Attributes.Remove("class");
liNewsFeed.Attributes.Add("class", "active");
break;
}
}
}
答案 1 :(得分:1)
您可能正在更改类属性,但随后您会立即重定向到另一个页面,以便您永远不会看到它。重新加载页面时,更改将丢失。
您可能需要将活动页面存储在会话变量中,然后在控件加载时设置活动类。
[编辑] 如果您希望控件反映它所在的页面,也许您可以使用页面标题(或其他页面属性之一):
protected void Page_Load(object sender, EventArgs e)
{
if (Parent.Page.Title == "My Title")
{
}
答案 2 :(得分:0)
或者,您可以选择检查浏览器的网址并在菜单中进行选择
string page = Path.GetFileNameWithoutExtension(Request.AppRelativeCurrentExecutionFilePath);
string pageDirectory = Path.GetDirectoryName(Request.AppRelativeCurrentExecutionFilePath);
string category = Request.QueryString.Count>0 ? Request.QueryString[0] : string.Empty;
switch (category)
{
case "home":
lnk_Home.CssClass = "selected";
break;
}