Asp.net mvc 是否禁用当前url的链接?
好的,我想这很容易Asp.net mvc 是否禁用当前url的链接?,asp.net-mvc,Asp.net Mvc,好的,我想这很容易 我有一个ViewMasterPage,上面有一些链接(Home/About/Login/etc)。我想要实现的是,当链接的引用url已经打开时,将其禁用(即,如果当前url为/Register,则应禁用注册链接..轻松哈!?) 由于我不喜欢在视图中编写大量的内联代码,我最终使用一些扩展方法(只是为了将代码保存在.cs文件中)扩展了HtmlHelper,在我的视图中,我称这些方法为register方法,以下是我的register方法作为示例: public static st
我有一个ViewMasterPage,上面有一些链接(Home/About/Login/etc)。我想要实现的是,当链接的引用url已经打开时,将其禁用(即,如果当前url为/Register,则应禁用注册链接..轻松哈!?)
由于我不喜欢在视图中编写大量的内联代码,我最终使用一些扩展方法(只是为了将代码保存在.cs文件中)扩展了HtmlHelper,在我的视图中,我称这些方法为register方法,以下是我的register方法作为示例:
public static string Register (this HtmlHelper html)
{
TagBuilder builder ;
if (HttpContext.Current.Request.Url.AbsoluteUri.ToUpperInvariant().Contains(MainLinks.Register.ToUpperInvariant()))
return MainLinks.Register; // will return the string "Register"
builder = new TagBuilder("a");
builder.InnerHtml = MainLinks.Register;
builder.AddCssClass("register");
builder.Attributes.Add("href", "/register/");
return builder.ToString();
}
尽管这样做有效,但仍然存在两个问题:Ps:不允许使用javascipt!它是该应用程序的无javascript版本 我不认为这有什么错,很清楚它的作用和效果。不过,可能最好是让它更易于重用,因为我可以想象您在其他链接中重复自己的操作。可能是这样的:
public static string RenderLink(this HtmlHelper html, string text, string url, object htmlAttr) {
if (!HttpContext.Current.Request.Url.AbsolutePath.StartsWith(url, StringComparison.InvariantCultureIgnoreCase)) {
return text; //comparison excludes the domain
}
TagBuilder tag = new TagBuilder("a");
tag.SetInnerText(text);
tag.Attributes.Add("href", url);
//... add attributes parsed as htmlAttr here
return tag.ToString();
}
然后将链接添加到视图中,如:
<%= Html.RenderLink("Register", "/register/", new { @class="register"}) %>
<%= Html.RenderLink("Account", "/account/", new { @class="account"}) %>
如果您想摆脱硬编码域,那么使用Request.Url.AbsolutePath而不是上面提到的AbsoluteUri可以实现这一点
另一种方法是从控制器解析模型中的当前页面信息,可能类似于ViewData.model.CurrentPage=“Register”;,但我不建议您这样做,因为我不认为在这种情况下这是控制器的工作。谢谢DaveG!我会尽量保持干燥!我会在这里再等一段时间,也许有人会提出一个更简单的想法!再次感谢。哦,我差点忘了提这件事+1 :)