Tôi đang đấu tranh với những gì có vẻ là một khái niệm rất đơn giản. Nếu tôi có một giá trị trong ViewBag dự định để sử dụng bởi _Layout.cshtml của tôi, làm thế nào và ở đâu để tôi đặt giá trị đó?Phương pháp tiếp cận để xử lý dữ liệu chung trong khung nhìn ASP.NET MVC 3
Dưới đây là rõ ràng nhất (với tôi) tùy chọn như tôi đang nhìn thấy chúng:
- Đặt giá trị trong mỗi bộ điều khiển (không DRY)
- Tạo cơ sở điều khiển của riêng tôi kế thừa từ điều khiển và thiết lập giá trị trong lớp cơ sở
- đặt giá trị trong Global.asax.cs (cảm thấy bẩn)
- Tạo một ActionFilter để thiết lập dữ liệu và đăng ký bộ lọc trên toàn cầu (còn cảm thấy sai)
- đặt giá trị trong _ViewStart.cshtml (feels RẤT sai và rất bẩn)
Ví dụ:
_Layout.cshtml
<!DOCTYPE html>
<html>
<head runat="server">
<title>@ViewBag.Title</title>
</head>
<body>
<div id="header">
<h1>Welcome @ViewBag.UserName</h2>
</div>
<div id="content">
@RenderBody()
</div>
</body>
</html>
Nếu mỗi bộ điều khiển đặt giá trị UserName, đó không phải là khủng khiếp KHÔ. Nếu tôi đã giải quyết vấn đề này với một cái gì đó như CodeIgniter, tôi chỉ cần tạo ra bộ điều khiển cơ bản của riêng mình để xử lý những thứ phổ biến này và đi theo con đường vui vẻ của tôi. Có một lựa chọn ưa thích hơn với ASP.NET MVC 3?
thực sự, trong trường hợp cụ thể này - tôi đoán "Tên người dùng" sẽ thực sự đến từ vé xác thực phiên/biểu mẫu. Vì vậy, bạn có thể muốn sử dụng một trình trợ giúp HTML sử dụng mã FormsAuth để lấy Tên người dùng ra khỏi cookie và hiển thị một MvcHtmlString - chỉ là một ý tưởng ... – RPM1984
Hmmm ... điểm tốt. Có lẽ @ ViewBag.UserName không phải là ví dụ tốt nhất. Tôi thực sự quan tâm đến bức tranh lớn hơn vào lúc này. – Greg
@ RPM1984: nó không quan trọng đối với quan điểm rằng "Tên người dùng" đến từ hình thức xác thực. Nó sẽ được thông qua trong (ViewBag hoặc cách khác). Chế độ xem sẽ không bao giờ "tìm nạp" bất kỳ thứ gì. Xem xét các kịch bản thử nghiệm là tốt, bạn muốn chuyển dữ liệu giả vào chế độ xem để kiểm tra đơn vị. Không thể nếu chế độ xem của bạn là "tìm nạp" mọi thứ. Ngoài ra khá nhiều invalidates toàn bộ các điểm của MVC pattern.Not chọn trên bạn, nhưng tôi đã chỉ nhìn thấy loại tâm lý lặp đi lặp lại trong bài viết MVC khác nhau (bao gồm cả mẫu dự án MVC mặc định!) – Roger