2016-06-16 4 views
1

Ich habe ein MVC-Projekt, das gemeinsam genutztes Layout verwendet, um Menüs oben und links von allen Seiten zu rendern. Ich habe eine Seite, auf der eine Nachricht für inaktive Benutzer angezeigt wird. Ich möchte diese Nachricht in exakt demselben Layout mit allen Menüs anzeigen, aber die Menüs sollten deaktiviert sein und der Benutzer kann nicht darauf klicken. Was kann ich verwenden? Gibt es etwas wie TagHelper, das ich hier benutzen kann?Deaktivieren von Links von freigegebenen Ansicht in MVC

, dass der Code in das Layout, das die Menüs mit Linkes zeigt:

!-- 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> 

+0

viele Möglichkeiten, wie Sie dies .. Teilansichten .. Kind Aktionen .. Javascript tun können .. anstelle von if/else für jedes Element zu schreiben .. '$ (" # nav-icons a "). removeAttr (" href ")' würde zum Beispiel alle href-Attribute entfernen in ul id = "nav-icons – JamieD77

+0

Das ist das genaue Szenario, in dem Sie Rasierer '@ Helfer' s benutzen würden, aber sie entschieden sich, sie aus irgendeinem seltsamen Grund von MVC 6 zu entfernen Sie können sie noch verwenden, wenn Sie in MVC 5 sind, aber da Sie Taghelfer erwähnten, nehme ich an nicht der Fall – TKharaishvili

+0

@GwynBleidd tatsächlich verwende ich MVC5. Jede Gilde, wie man @helper benutzt? –

Antwort

1

Nun, Sie können es immer selbst implementieren, können Sie nicht? Es würde wie folgt aussehen:

[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"); 
     } 
    } 
} 

Import es in den Ansichten wie folgt:

@addTagHelper "*, {Name of your assembly}" 

Und es verwendet:

<a is-disabled="true" href="@Url.Action("Dashboard","Home")" class="dashboard-view"> 
     <span class="icon-dash"></span>dashboard 
</a> 

Sie am docs about tag helpers einen Blick nimmt es wörtlich dauert ein paar Minuten, um zu verstehen ...

EDIT

In MVC 5 können Sie @helper -s verwenden, die im Grunde HTML-Funktionen zurückgeben. Sie können eine auf diese Weise erklären:

@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> 
} 

Und es nennen, wie Sie eine reguläre Funktion nennen würde:

@RenderMenuLink(Url.Action("Dashboard","Home"), "dashboard-view", "icon-dash", "dashboard", false) 
+0

das ist genau das, was ich meine, aber nicht sicher, wie Taghelpers zu verwenden ist. Ich bin in vs2013 und MVC5. Es steht mir nicht zur Verfügung. –

+0

@nik Ich habe die Antwort aktualisiert und den MVC 5-Helfer Ansatz enthalten – TKharaishvili

0

Warum Sie TagHelper brauchen? Sie können jederzeit Ihre Benutzer auf Ansicht überprüfen und statt <a> Tag mit href auf Ihrer Ansicht nur Text setzen:

<li class="span_12 colWrap"> 
    @if(Context.User.Identity.IsAuthenticated) //or any other way how you check user is active 
    { 
     <a href="@Url.Action("Dashboard","Home")" class="dashboard-view"> 
      <span class="icon-dash"></span> 
      Dashboard 
     </a> 
    } 
    else 
    { 
     <a class="dashboard-view"> 
      <span class="icon-dash"></span> 
      Dashboard 
     </a>   
    } 
</li> 
Verwandte Themen