Hello Razor MVC Gurus:Dao động MVC, nơi đặt các biến toàn cầu có thể truy cập trên trang chính, partiview và xem?
Câu hỏi mới.
Bối cảnh. Tôi có một IIdentity tùy chỉnh được thiết lập trong một HttpModule trước khi nó được để điều khiển & xem. Để sử dụng nó, tôi phải làm
MyIdentity myIdentity = (MyIdentity)((GenericPrincipal)context.User).Identity;
MyComplexUser user = myIdentity.User;
//user.name //user.location //user.username //etc
Vấn đề là, tôi sử dụng các đối tượng ở những nơi khác nhau như
- bố trí tổng thể
- Một số phụ cấp bố trí lồng nhau
- Một số partialviews
- Một số lượt xem
Nó thực sự depe nds về những thuộc tính của đối tượng "MyComplexUser" mà các khung nhìn cần.
Hiện tại, trong chế độ xem, tôi phải thực hiện thao tác truyền thực sự phức tạp này để truy cập thuộc tính. Ví dụ: nếu tôi muốn "Tên" của người dùng, tôi cần phải làm
@ (((MyComplexUser) (((MyIdentity) (GenericPrincipal) context.User) .Identity) .User)).)
tôi cho rằng tôi có thể đặt nó trong bộ điều khiển và sau đó cư ViewBag với một tài sản ViewBag.MyUser, nhưng sau đó
- tôi không muốn sử dụng ViewBag. Tôi thích các đối tượng được nhập mạnh mẽ
- Nếu tôi sử dụng đối tượng được nhập mạnh ("MyUser") cho chế độ xem thì tôi phải phổ biến tất cả các mô hình đó bằng thuộc tính "MyUser". Cảm thấy một chút bẩn? Vì tôi muốn giữ cho các mô hình của mình luôn sạch sẽ và cụ thể cho các chế độ xem mà họ có liên quan. Bên cạnh đó, nó được lặp đi lặp lại không cần thiết.
- Ở những nơi như master_layout.cshtml hoặc partviews, làm cách nào để bạn truy cập "MyUser" nếu tôi đặt chúng trong bộ điều khiển?
- Sử dụng RenderAction và xây dựng một phần xem trước cho từng thuộc tính Người dùng là quá mức cần thiết?
Cảm ơn. Một lần nữa, tôi là một newbie tại MVC 4, bất cứ đề nghị nào cũng đánh giá cao nó.
Tôi có một kịch bản tương tự. Tôi sẽ đăng nó như một bình luận, nếu bạn thích tôi có thể thêm vào như một câu trả lời: tất cả các bộ điều khiển của tôi kế thừa từ một 'BaseController', mà tôi đã viết. Trong lớp cơ sở này, tôi đã kết nối các sự kiện của vòng đời, chẳng hạn như 'ExecuteCore'. Tôi cũng sử dụng bộ lọc cho những thứ như thế này. Ở phía bên xem, tất cả các kiểu xem của tôi kế thừa từ 'BaseVM', nơi tôi đặt các thuộc tính chung, chẳng hạn như các thông báo cho người dùng, tên người dùng và vân vân. –
@AndreCalil, bạn có thể giải thích thêm một chút không? Vì vậy, bạn đang cư trú một mô hình cơ sở từ bộ điều khiển cơ sở, là nó? Tôi không nhận được phần mà bạn sử dụng bộ lọc, bạn có thể đưa ra ví dụ không? Ngoài ra, nếu bạn điền các thuộc tính phổ biến trong mô hình cơ sở, bạn sử dụng nó như thế nào trong trang bố cục chính? do \\ @ Model BaseVM và sau đó \\ @ Model.UserName? Cảm ơn – Liming
Bạn đã đến. Và tôi không nghĩ rằng đây là một câu hỏi mới ở tất cả các số –