Asp.net mvc 在MVC中禁用共享视图中的链接
我有一个MVC项目,它使用共享布局来呈现所有页面顶部和左侧的菜单。我有一个页面,为非活动用户显示消息。我想显示这个消息在完全相同的布局与所有的菜单,但菜单应该被禁用,用户不能点击他们。我能用什么?这里有像TagHelper这样的东西我可以用吗 这是布局中显示带有链接的菜单的代码:Asp.net mvc 在MVC中禁用共享视图中的链接,asp.net-mvc,Asp.net Mvc,我有一个MVC项目,它使用共享布局来呈现所有页面顶部和左侧的菜单。我有一个页面,为非活动用户显示消息。我想显示这个消息在完全相同的布局与所有的菜单,但菜单应该被禁用,用户不能点击他们。我能用什么?这里有像TagHelper这样的东西我可以用吗 这是布局中显示带有链接的菜单的代码: !-- TOP NAVIGATION --> <div id="top-nav" class="span_12 section"> <div class="span_10 content
!-- TOP NAVIGATION -->
<div id="top-nav" class="span_12 section">
<div class="span_10 content group">
<a href="loginView.html" class="span_4 col cf-logo"><img src="~/content/images/logo.png"></a>
<ul class="right">
<li class="colWrap">
<a href="@Url.Action("Dashboard","Home")" class="dashboard-view"><span class="icon-dash"></span>dashboard</a>
</li>
<li class="colWrap">
<!-- if there are document alerts -->
<span class="icon-alert-13"></span>
<!-- end if -->
<a href="@Url.Action("Document","Document")" class="documents-view"><span class="icon-docs"></span>documents</a>
</li>
<li class="colWrap">
<a href="@Url.Action("HelpCenterIndex","HelpCenter")" class="helpcenter-view"><span class="icon-help"></span>help center</a>
</li>
</ul>
</div>
</div>
<!-- LEFT SIDE NAVIGATION -->
<div id="left-nav" class="span_1 section">
<ul id="nav-icons" class="span_12 section">
<li class="span_12 colWrap">
<a href="@Url.Action("Dashboard","Home")" class="dashboard-view">
<span class="icon-dash"></span>
Dashboard
</a>
</li>
<li class="span_12 colWrap">
<a href="@Url.Action("Document","Document")" class="documents-view">
<span class="icon-docs"></span>
Documents
</a>
</li>
<li class="span_12 colWrap">
<a href="@Url.Action("HelpCenterIndex","HelpCenter")" class="helpcenter-view">
<span class="icon-help"></span>
Help Center
</a>
</li>
</ul>
!--顶部导航-->
-
-
-
-
-
-
为什么需要TagHelper?您始终可以在查看时检查您的用户,而不是
}
其他的
{
仪表板
}
你可以自己实现,不是吗?它看起来像这样:
[HtmlTargetElement("a", Attributes = "is-disabled")]
public class DisableLinkTagHelper : TagHelper
{
[HtmlAttributeName("is-disabled")]
public bool Disabled { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (Disabled)
{
output.Attributes.RemoveAll("href");
}
}
}
在视图中导入它,如下所示:
@addTagHelper "*, {Name of your assembly}"
并使用它:
<a is-disabled="true" href="@Url.Action("Dashboard","Home")" class="dashboard-view">
<span class="icon-dash"></span>dashboard
</a>
并像调用常规函数一样调用它:
@RenderMenuLink(Url.Action("Dashboard","Home"), "dashboard-view", "icon-dash", "dashboard", false)
有很多方法可以做到这一点。。局部视图。。儿童行动。。javascript。。而不是为每个项目编写if/else<代码>$(“#导航图标a”)。例如,removeAttr(“href”)将删除ul id中的所有href属性=“导航图标这正是您将使用razor
@helper
-s的场景,但出于某种奇怪的原因,他们决定将其从MVC6中删除。如果您在MVC5中,您仍然可以使用它们,但是由于您提到了标记帮助程序,我认为情况并非如此。@GwynBleidd实际上我使用的是MVC5。有关于如何使用@helper的帮会吗?这正是我的意思,但不确定如何使用Taghelpers。我在vs2013和MVC5。我无法使用。@nik我已经更新了答案,并包含了MVC 5辅助方法
@helper RenderMenuLink(string url, string cssClass, string icon, string text, bool enabled)
{
var href = "";
if (enabled)
{
href = string.Format("href=\"{0}\"", url);
}
<a @href class="@cssClass">
<span class="@icon"></span> @text
</a>
}
@RenderMenuLink(Url.Action("Dashboard","Home"), "dashboard-view", "icon-dash", "dashboard", false)