2011-01-11 31 views
7

Đã làm việc với .net trong cả hai winforms và ASP.net trong một vài năm tôi bây giờ bắt đầu để có được vào MVC (một chút cuối tôi biết). Một sự nhầm lẫn lớn đối với tôi là khái niệm về 'các thành phần' có thể tái sử dụng, tương tự như khái niệm về một usercontrol trong các biểu mẫu web.ASP> net MVC partials tái sử dụng

Ví dụ: tôi muốn có một số 'tiện ích' trong khu vực thành viên của trang web của tôi, một trong số đó là chi tiết về người quản lý tài khoản người dùng đã đăng nhập. Tuy nhiên, tôi có thể tạo điều này như một phần khi trang tải dữ liệu cần được chuyển vào như một phần của ViewModel/View Data. Tôi muốn sử dụng tiện ích này trong một số phần khác nhau mà sau đó có nghĩa là tôi cần phải đặt mã để chuyển dữ liệu vào một số bộ điều khiển khác nhau. Điều này dường như vi phạm nguyên tắc DRY, hoặc tôi đang thiếu một cái gì đó ở đây? Tôi sẽ lý tưởng như mọi thứ được đóng gói trong 1 phần mà sau đó có thể được sử dụng trong bất kỳ trang nào.

Trả lời

4

Bạn có thể đi ba cách:

1) Đối với điều khiển đơn giản mà không có nhiều logic, bạn có thể tạo thể hiện mới của mô hình giao diện tùy chỉnh cho việc kiểm soát: Html.RenderPartial ("YourControl", mới YourControlViewModel() {Param1 = "value1", Param2 = Model.AnotherValue});

2) Nếu bạn cần một số logic trả về cho điều khiển, bạn có thể sử dụng Html.RenderAction ("ActionName", "SomeControllerName", RouteValuesDictionary); Nó sẽ gọi hành động điều khiển chuẩn, sử dụng khung nhìn và chèn kết quả đầu ra trở lại trang. Bạn có thể thêm [ChildActionOnly] thuộc tính vào phương thức điều khiển để đảm bảo rằng phương thức sẽ chỉ có sẵn từ Html.RenderPartial. Nó là hơi vi phạm nguyên tắc MVC (xem không nên gọi điều khiển), nhưng nó tuyệt vời cho các vật dụng, và nó được sử dụng trong thế giới Ruby on Rails mà không có nhiều vấn đề. Bạn có thể kiểm tra bài viết tuyệt vời từ Haacked

3) Tạo helper html tùy chỉnh cho công việc như ngày tuỳ chỉnh định dạng, tính toán vv ..

Trong trường hợp của bạn, tôi sẽ chọn thứ hai.

+0

Điều đó có ý nghĩa rất nhiều - tôi đoán trong trường hợp đơn giản của tôi, tôi có thể sử dụng không. 1 và truy xuất người dùng hiện đã đăng nhập từ trình tạo hàm ViewModel hoặc số 2 nếu tương tác 2 chiều là bắt buộc. – Macros

+0

Nếu mô hình khung có id của người dùng, bạn có thể chuyển nó trong giá trị tuyến đường, sử dụng 2) và lưu vào bộ nhớ cache dữ liệu. Một tùy chọn khác là tải người dùng đã đăng nhập hiện tại từ phiên, nó có thể rất đơn giản, nhưng vi phạm một số nguyên tắc. Đánh dấu câu trả lời nếu bạn thích nó, cảm ơn. – jhexp

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