Bạn nên không thực sự được gọi trực tiếp từ ConfigurationManager
xem của bạn. Số lượt xem phải là 'câm' trong MVC, tức là không có kiến thức về cấu trúc dữ liệu hoặc back-end và bằng cách gọi trực tiếp ConfigurationManager
chế độ xem của bạn biết quá nhiều về cách cài đặt của bạn được lưu trữ. Nếu bạn thay đổi cài đặt của mình để sử dụng một cửa hàng khác (ví dụ: cơ sở dữ liệu) thì bạn phải thay đổi chế độ xem của mình.
Vì vậy, bạn nên lấy giá trị đó ở nơi khác và chuyển giá trị đó đến chế độ xem của bạn để chế độ xem của bạn chỉ cần xử lý và hiển thị nó. Bạn có thể có 2 lựa chọn:
- Thêm một cái gì đó vào ViewBag và lấy nó trong giao diện
- Render một hành động từ một bộ điều khiển phổ biến mà đi một ViewModel gõ mạnh lên một cái nhìn cục bộ.
Tôi muốn ngăn chặn tùy chọn 1 vì nói chung tốt nhất là tránh ViewBag
vì không được nhập mạnh (Is using ViewBag in MVC bad?). Ngoài ra, để thực hiện việc này, bạn có thể phải kế thừa từ một BaseController
cho mọi bộ điều khiển có thể gây đau hoặc tạo bộ lọc hành động toàn cầu ghi đè ActionExecuted
và nhồi nhét gì đó ở số ViewBag
tại đó.
Tùy chọn 2 có lẽ tốt hơn. Tôi muốn tạo ra một cái gì đó điều khiển phổ biến như:
public class CommonController : Controller
{
[ChildActionOnly]
public ViewResult Settings()
{
// Get some config settings etc here and make a view model
var model = new SettingsModel { Foo = myProject.Properties.Settings.Default.foo };
return View(model);
}
}
Sau đó, trong file layout của bạn, bạn có thể gọi:
@Html.Action("Settings", new { controller = "Common" })
nào làm cho một cái nhìn cục bộ mạnh mẽ, đánh máy (~/Views/Common/Settings. cshtml) trông giống như:
@model YourProject.Models.SettingsModel
@if(Model.Foo)
{
// So something
}
bằng cách đó bạn vẫn đang sử dụng một mô hình mạnh mẽ gõ và xem, xem cách bố trí của bạn vẫn sạch sẽ và đơn giản và xem một phần của bạn vẫn 'câm'
Nguồn
2013-04-16 11:55:49
Cách thiết lập thuộc tính đó trong ViewBag (trong Controller) và gọi nó từ đó? –
Ý tưởng hay, sẽ thử nó – gurehbgui
nhưng vấn đề là, đây là trang _Layout của tôi, tôi có Viewbag cho nó ở đâu? Tôi sẽ không đặt nó trong mỗi bộ điều khiển đơn mà tôi có – gurehbgui