2011-01-06 7 views
22

In meiner Ansicht habe ich einige Administrator-Links, die ich ausblenden und basierend auf Benutzerrolle zeigen möchte, wie dies in der Ansicht z.ASP.NET MVC Überprüfen der Rolle innerhalb der Ansicht

<%= if(CHECK IF USER ROLE ADMIN) { %> 
     <div class="tools"> 
      <ul> 
       <li class="edit"><%= Html.ActionLink("Edit", "Edit", new { id = Model.storyId }) %></li> 
       <li class="delete"><%= Html.ActionLink("Delete", "Delete", new { id = Model.storyId }) %></li> 
      </ul> 
     </div> 
<%= } %> 
+7

vielleicht möchten Sie nur diese Überprüfung in Ihrer Aktion durchführen und den Wert in Viewdata Hash setzen oder als Eigenschaft auf Ihrem Viewmodel, um Ihre Ansichten stumm zu halten. – R0MANARMY

+0

Ich würde es vorziehen, nur in der Ansicht mit einer einfachen if-Anweisung zu überprüfen. Ich habe es schon einmal gemacht, kann mich aber nicht mehr an den Code erinnern. – Cameron

+1

Nur weil du es schon gemacht hast, macht es keine gute Idee. Denken Sie daran, dass jeder Code (wie trivial) Sie in Ihren Blick stecken, Code ist, den Sie nicht (einfach) Tests gegen oder Refactor schreiben können. Rob Connery schrieb auch eine großartige Post eine Weile zurück auf [Avoiding Tag Soup] (http://blog.wekeroad.com/blog/asp-net-mvc-avoiding-tag-soup/). – R0MANARMY

Antwort

22
<% if (Page.User.IsInRole("Admin")){ %> 

<%}%> 

Dies ist jedoch eine schreckliche Idee meiner Meinung nach. Es ist besser, ViewData oder Model darzustellen, was die Ansicht anzeigen soll, und die Ansicht kann einfach die Ansichtsdaten überprüfen. Eine Controller-Basisklasse oder ein Aktionsfilter kann sich dieses sehr einfache Verfahren wiederholt verwenden und den Code an einer Stelle existieren lassen.

+0

Normalerweise verwende ich ein ViewModel, um diese Art von Informationen von einem Controller zu senden. Ich versuche jedoch, bestimmte Dinge in meinem Haupt _Layout.cshtml basierend auf Rollen anzuzeigen. Wie "schrecklich" ist die Idee und warum? Würde es sich lohnen, stark typisierte partielle Ansichten zu erstellen, nur um hier und da eine Klasse hinzuzufügen und den Inhalt ein- oder auszublenden, oder ist dies die Verwendung einer Hilfsmethode in meiner _Layout-Ordnung? Ich werde nur nervös wegen generalisierter Behauptungen, dass Dinge "schreckliche Ideen" sind. – Methodician

+0

Sie können das Ansichtsmodell einfach definieren lassen, was angezeigt werden soll, und Ihre gesamte Rollenlogik im Controller (oder einer vom Controller verwendeten Klasse) berechnen und das Ansichtsmodell entsprechend zuweisen. Das direkte Überprüfen funktioniert immer noch, ist aber in größeren Projekten weniger wartbar und für die Ansicht unordentlicher. – CRice

+0

Sie können den Anruf tätigen, wenn es sich aufgrund Ihrer Situation lohnt oder nicht. – CRice

0

Ich stimme mit den meisten anderen überein, dass diese Daten "vorgegeben" werden sollten, wenn Sie dies tun, indem der Controller oder andere Geschäftsdienste die Ansicht einfach so weit wie möglich HTML Markup und Sprachkontrollstrukturen verwenden „Fleisch aus der Seite“ mit anderen typischen Web-Seite Gebäude Leckereien wie jQuery, CSS, etc. etc.

+1

Ich verstehe deine Aussage nicht ganz, kannst du sie umformulieren? –

38
@if (this.User.IsInRole("Administrator")) 
{ 

} 
+2

Dies sollte die akzeptierte Antwort sein. –

+1

mit diesem. löste das Problem – PAVITRA

Verwandte Themen