2011-01-06 38 views
22

Trong chế độ xem của tôi, tôi có một số liên kết quản trị mà tôi muốn ẩn và hiển thị dựa trên vai trò của người dùng cách thực hiện điều này trong chế độ xem, ví dụ:ASP.NET MVC Kiểm tra vai trò bên trong xem

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

Bạn có thể chỉ cần thực hiện kiểm tra này trong hành động của bạn và đặt giá trị vào hàm băm ViewData hoặc dưới dạng tài sản trên viewmodel của bạn để giữ cho quan điểm của bạn câm. – R0MANARMY

+0

Tôi muốn chỉ kiểm tra bên trong chế độ xem bằng cách sử dụng câu lệnh if đơn giản. Tôi đã thực hiện nó trước nhưng không thể nhớ được mã. – Cameron

+1

Chỉ vì bạn đã thực hiện nó trước khi không làm cho nó một ý tưởng tuyệt vời. Hãy nhớ rằng bất kỳ mã nào (tuy nhiên tầm thường) bạn đưa vào khung nhìn của mình là mã bạn không thể (ít nhất là dễ dàng) viết các bài kiểm tra đối với hoặc refactor. Rob Connery cũng đã viết một bài đăng tuyệt vời trong khi trở lại [Tránh Tag Soup] (http://blog.wekeroad.com/blog/asp-net-mvc-avoiding-tag-soup/). – R0MANARMY

Trả lời

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

<%}%> 

Tuy nhiên đây là một ý tưởng khủng khiếp trong quan điểm của tôi. Tốt hơn là hãy để Chế độ xem hoặc Mô hình đại diện cho những gì chế độ xem hiển thị và chế độ xem có thể chỉ cần kiểm tra dữ liệu chế độ xem. Một lớp cơ sở điều khiển hoặc một bộ lọc hành động có thể sử dụng lặp đi lặp lại việc này rất đơn giản và cho phép mã tồn tại ở một nơi.

+0

Tôi thường sử dụng một ViewModel để gửi loại thông tin này từ một bộ điều khiển. Tuy nhiên, tôi đang cố gắng hiển thị một số thứ trong _Layout.cshtml chính của tôi dựa trên vai trò. Chỉ cần làm thế nào "khủng khiếp" là ý tưởng, và tại sao? Nó sẽ được giá trị nó để tạo ra mạnh mẽ gõ một phần quan điểm chỉ để thêm một lớp ở đây và có hiển thị và ẩn nội dung, hoặc là lựa chọn này sử dụng một phương pháp trợ giúp trong _Layout tốt của tôi? Tôi chỉ lo lắng về những tuyên bố tổng quát rằng mọi thứ là "những ý tưởng khủng khiếp". – Methodician

+0

Bạn chỉ có thể có mô hình khung nhìn xác định những gì cần hiển thị và tính toán tất cả các vai trò của bạn trong bộ điều khiển (hoặc một lớp mà trình điều khiển sử dụng) và gán mô hình khung thích hợp. Việc kiểm tra nó trực tiếp vẫn hoạt động nhưng sẽ ít được bảo trì trong các dự án lớn hơn và sẽ phức tạp hơn đối với quan điểm để giải quyết. – CRice

+0

Bạn có thể thực hiện cuộc gọi nếu nó đáng giá hoặc không dựa trên tình huống của bạn. – CRice

0

Tôi đồng ý với hầu hết những người khác rằng dữ liệu này sẽ được cung cấp bởi bộ điều khiển hoặc các dịch vụ kinh doanh khác trong khi Chế độ xem chỉ sử dụng càng nhiều càng tốt, đánh dấu html và cấu trúc điều khiển ngôn ngữ "thịt ra trang" bằng cách sử dụng các trang web xây dựng trang web điển hình khác như jquery, css, v.v.

+1

Tôi không hiểu lời phát biểu của bạn, bạn có thể thuật lại được không? –

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

} 
+2

Đây phải là câu trả lời được chấp nhận. –

+1

bằng cách sử dụng này. giải quyết vấn đề – PAVITRA

Các vấn đề liên quan