我在ASP.NET网站上的主菜单遇到了一些问题。我想要的是,当用户点击链接时,它应该将其颜色更改为黑色并保持黑色,直到用户点击其他链接。
换句话说:我想突出显示所选链接。
到目前为止,我已经使用了一些解决方法JavaScript(我认为应该考虑使用jQuery),但问题是,样式不会保留在页面回发上(或者似乎......)
我目前的javascript:
<script type="text/javascript">
var last = "none";
function LinkSelector(link) {
if (last != "none") {
document.getElementById(last).className = "NormalLink";
}
document.getElementById(link).className = "ActiveLink";
last = link;
}
</script>
正如我所写的那样,它肯定会在点击时更改类名,但在加载新页面时不会保持这种状态。
任何人都有解决方法吗? :)
提前致谢。
一切顺利,
博
答案 0 :(得分:4)
通常,我将使用ASP:Menu控件。它提供了对其中菜单项的适当控制。
例如,这是我在主页面中转储并在初始页面命中期间运行的通用方法。此方法循环遍历菜单控件中的菜单项,并选择与当前URL对应的菜单项。
protected void Page_Load(object sender, EventArgs e) {
if (!Page.IsPostBack) {
SelectMenuItem();
}
}
private void SelectMenuItem() {
string rawurl = Request.RawUrl.ToLower();
rawurl = rawurl.Substring(rawurl.LastIndexOf("/") + 1);
if (rawurl.IndexOf("?") >= 0)
rawurl = rawurl.Substring(0, rawurl.IndexOf("?"));
foreach (MenuItem mi in mnuMain.Items) {
if (mi.ChildItems.Count == 0) {
if (mi.Value == rawurl) {
mi.Selected = true;
break;
}
}
else {
foreach (MenuItem cmi in mi.ChildItems) {
if (cmi.Value == rawurl) {
mi.Selected = true;
break;
}
}
if (mi.Selected)
break;
}
}
}
以下是我在asp菜单控件中的一些菜单项。请注意,我使用Value属性来帮助我指示上述方法中哪个菜单项与请求的URL相关。
<Items>
<asp:MenuItem Text="Forms" Value="authorization">
<asp:MenuItem Text="New Authorization Form" Value="createauthform.aspx" NavigateUrl="~/CreateAuthForm.aspx"></asp:MenuItem>
<asp:MenuItem Text="Manage My Authorization Forms" Value="myrequests.aspx" NavigateUrl="~/MyRequests.aspx"></asp:MenuItem>
<asp:MenuItem Text="Audit Attendance Form" Value="auditform.aspx" NavigateUrl="~/AuditForm.aspx"></asp:MenuItem>
<asp:MenuItem Text="Tax Determination Statement" Value="taxstatement.aspx" NavigateUrl="~/TaxStatement.aspx"></asp:MenuItem>
</asp:MenuItem>
</Items>
答案 1 :(得分:0)
考虑将“last”变量实现为函数的静态成员,这里是how it's done。这样,它的值将在函数调用之间保留。我不确定它是否在页面加载之间保留,但你可以测试它。
如果没有,您将不得不以某种方式指示ASP记住该值。关于那个,我和块重一样有用。