2011-01-06 20 views
22

W moim widoku Mam kilka linków administracyjnych, które chciałabym ukryć i pokazać w zależności od roli użytkownika, jak to zrobić w widoku np.ASP.NET MVC Sprawdź rolę wewnątrz widoku

<%= 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

może chcesz po prostu wykonać tę kontrolę w swoim działaniu i umieścić wartości hash do ViewData lub jako własność na twoim modelu widokowym, aby zachować głupie poglądy. – R0MANARMY

+0

Wolałbym po prostu sprawdzić wewnątrz widoku za pomocą prostego instrukcji if. Zrobiłem to wcześniej, ale po prostu nie pamiętam kodu. – Cameron

+1

Tylko dlatego, że zrobiłeś to wcześniej, nie jest to świetny pomysł. Pamiętaj, że jakikolwiek kod (jakkolwiek banalny) umieszczasz w widoku to kod, którego nie możesz (przynajmniej z łatwością) napisać testów przeciwko lub refaktorowi. Rob Connery napisał też świetny post z powrotem w [Avoiding Tag Soup] (http://blog.wekeroad.com/blog/asp-net-mvc-avoiding-tag-soup/). – R0MANARMY

Odpowiedz

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

<%}%> 

Jednak jest to fatalny pomysł moim zdaniem. Lepiej jest, aby ViewData lub Model reprezentowały to, co widok ma wyświetlać, a widok może po prostu sprawdzić dane widoku. Klasa bazowa kontrolera lub filtr akcji może powtarzalnie używać tego bardzo prostego kodu i umożliwiać istnienie kodu w jednym miejscu.

+0

Zwykle używam ViewModel do wysyłania tego rodzaju informacji z kontrolera. Jednak próbuję wyświetlić pewne rzeczy w moim głównym _Layout.cshtml na podstawie ról. Tylko jak "okropny" jest pomysł i dlaczego? Czy warto byłoby tworzyć silnie typowane widoki częściowe tylko po to, by dodać klasę tu i tam, pokazującą i ukrywającą zawartość, czy jest to wybrane użycie metody pomocnika w mojej grzywnie _Layout? Po prostu denerwuję się ogólnymi twierdzeniami, że rzeczy są "okropnymi pomysłami". – Methodician

+0

Można po prostu ustawić model widoku, który ma być wyświetlany i opracować całą logikę ról w kontrolerze (lub klasie, której używa kontroler) i odpowiednio przypisać model widoku. Sprawdzanie go bezpośrednio działa, ale będzie mniej wymagalne w większych projektach i będzie bardziej niefrasobliwe z punktu widzenia, którym można się zająć. – CRice

+0

Możesz wykonać połączenie, jeśli jest ono warte lub nie, w zależności od sytuacji. – CRice

0

Zgadzam się z większością innych, że dane te powinny być dostarczane "z góry ustalone", jeśli tak, przez kontrolera lub inne usługi biznesowe, podczas gdy View po prostu używa, w miarę możliwości, znaczników html i struktur kontroli języka do „ukształtowaniu stronę” przy użyciu innych typowych stron internetowych gadżety budowlanych, takich jak jQuery, CSS, etc. etc.

+1

Nie bardzo rozumiem twoje oświadczenie, czy mógłbyś zmienić zdanie? –

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

} 
+2

To powinna być zaakceptowana odpowiedź. –

+1

używając tego. rozwiązał problem – PAVITRA

Powiązane problemy