2010-11-20 36 views
10

Tôi đã tự hỏi thực hành tốt nhất là gì khi phổ biến danh sách thả xuống thường được sử dụng trong ASP.NET MVC. Ví dụ, tôi có một quốc gia và Nhà nước lựa chọn được sử dụng thường xuyên trong ứng dụng của tôi. Nó có vẻ bẩn để cư trú viewmodel và ràng buộc với viewmodel đó từ bộ điều khiển của tôi cho mỗi lần xem duy nhất tôi muốn chứa một danh sách thả xuống như vậy.ASP.NET MVC - Phổ biến danh sách thả xuống được sử dụng phổ biến

Làm cách nào để mọi người điền danh sách thả xuống của họ trong các trường hợp như vậy? - baseclass tùy chỉnh với điều này nướng trong? Lớp trợ giúp, v.v.

Cảm ơn trước,

JP

Trả lời

7

Bạn có thể có một thuộc tính RequiresStateList để tiêm rằng chức năng chung cho các hành động mà cần nó.

public class RequiresStateList : ActionFilterAttribute { 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     filterContext.Controller.ViewData["StateList"] = GetStates(); 
    } 
} 

Và hành động của bạn

[RequiresStateList] 
public ActionResult Index() { 
    return View(); 
} 

Bây giờ bạn có thể nhận được rằng danh sách từ ViewData theo quan điểm của bạn.

+0

Không biết tại sao tôi không nghĩ đến này - một giải pháp thanh lịch và tái sử dụng. Cảm ơn! –

+0

@JP, Bạn được chào đón :) –

+1

Trong jest, tôi tuyên bố rằng điều này vi phạm Nguyên tắc Thunderdome! – Merritt

3

Tuỳ chỉnh HTML Helpers là con đường để đi ...

http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs

+0

Rất thanh lịch: Cả mô hình cũng như chế độ xem đều không bị cồng kềnh. * Mã * trong chế độ xem là trang nhã và có thể tái sử dụng. HtmlHelper có thể được kiểm tra riêng biệt. –

+0

Tôi thích giải pháp này hơn là có chúng trong các mô hình. Tôi muốn giữ mô hình của mình cho dữ liệu đang được điền/gửi, trong trường hợp này, sẽ là giá trị được chọn - không phải danh sách đầy đủ các giá trị. Chúng cũng có ích để cho phép các mẫu xem của bạn tìm nạp thuộc tính 'Văn bản' của giá trị đã chọn cho mẫu DispalyFor (tức là tìm nạp thuộc tính Văn bản trong đó Thuộc tính giá trị khớp với giá trị đã chọn). –

+0

Mở rộng những người giúp đỡ HTML với DAL phá vỡ kiến ​​trúc MVC, bởi vì bạn sẽ có lượt xem của bạn gọi đến lớp dữ liệu thay vì nó chỉ là giả. Mặc dù phá vỡ kiến ​​trúc MVC không nhất thiết phải là một điều xấu. – Yorro

0

Tôi là một fan hâm mộ lớn của việc tạo ra mô hình điểm cho rằng phù hợp (mô hình) từng chế độ xem chính xác. Vì vậy, nếu bạn có một cái nhìn với một danh sách thả xuống các tiểu bang, mô hình khung nhìn của tôi cho trang đó sẽ có một bộ sưu tập Hoa của ListItems.

Tôi sẽ không lo lắng về việc có các kiểu xem với bộ sưu tập tiểu bang trên đó. Thay vào đó tôi muốn tập trung logic để có được các tiểu bang, một cái gì đó như:

viewModel.States = StatesHelper.GetStates(); // returns IList<ListItem> 
+0

có một lý lẽ thú vị về cách tiếp cận này tại đây: http://mikehadlow.blogspot.com/2010/10/populating-drop-down-lists-in-aspnet.html – Merritt

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