2011-02-07 2 views
8

Tôi đang viết ứng dụng MVC 3 đầu tiên của tôi (trong ASP.NET) và tôi không biết làm thế nào tôi có thể (nên) hiển thị menu cho những người dùng khác nhau.ASP.NET MVC - menu cho các vai trò khác nhau

Ứng dụng của tôi được tạo ra như MVC3 ứng dụng Web và giao diện trình đơn như thế này:

<div id="menucontainer"> 
      <ul id="menu"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.ActionLink("Info", "Info", "Home")</li> 
      </ul> 
</div> 

Tôi tạo ra hai loại vai trò: người sử dụng và quản trị. Bây giờ, tôi muốn hiển thị một liên kết khác cho người dùng (Dự án, Hồ sơ) và cho quản trị viên (Quản lý dự án, Quản lý tài khoản, Quản lý tin tức).

Tôi nên làm như thế nào?

+2

Bạn đã nhìn câu hỏi này: [Xây dựng một ASP.NET MVC Master Page menu động, Dựa trên “Vai trò” người dùng hiện tại của] (http://stackoverflow.com/câu hỏi/2203320/xây dựng-một-asp-net-mvc-master-page-menu-dựa trên động-on-the-hiện-người dùng), dường như địa chỉ gần như cùng một câu hỏi mà bạn có và mọi người đã trả lời nó. – R0MANARMY

Trả lời

7

tôi tìm thấy giải pháp:

<div id="menucontainer"> 
      <ul id="menu"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.ActionLink("Info", "Info", "Home")</li> 
       @if (Request.IsAuthenticated && HttpContext.Current.User.IsInRole 
("user")) { 
        <li>Projects link</li> 
        <li>Profile link</li> 
       } 
       @if (Request.IsAuthenticated && HttpContext.Current.User.IsInRole 
("admin")) { 
        <li>Manage Projects link</li> 
        <li>Manage Accounts link</li> 
       } 
      </ul> 
</div> 
+9

Bạn không nên đặt nhiều logic điều kiện vào quan điểm của mình. Nếu bạn nhấn mạnh vào việc làm theo cách này, bạn thực sự nên đặt cả hai kiểm tra đó vào hành động của bạn và thêm các thuộc tính boolean đơn giản vào ViewModel của bạn. – R0MANARMY

+0

[link] (http://forums.asp.net/t/1903464.aspx?having+5+roles+and+one+layout+for+all+of+them+with+custom+menu+per+roles + trong + mvc) @ehoog logic này không nên được áp dụng trong xem, vì nó làm cho mã xem rất lộn xộn và nó vi phạm các nguyên tắc của MVC. Logic này phải nằm trong bộ điều khiển. Tôi đề nghị bạn: Tạo mô hình lớp Trong tác vụ Bộ điều khiển, hãy điền mô hình với dữ liệu cho các mục menu (tùy thuộc vào vai trò). Trong giao diện, hãy tạo menu bằng cách sử dụng dữ liệu menu từ mô hình. – sosha