2011-02-01 40 views

Trả lời

15

Nếu chúng ta giả sử rằng bạn có một mô hình:

public class FooModel 
{ 
    public int ModelId { get; set; } 
    public string Description { get; set; } 
} 

sau đó bạn có thể có một ánh xạ giữa FooModelSelectListItem:

Mapper 
    .CreateMap<FooModel, SelectListItem>() 
    .ForMember(
     dest => dest.Value, opt => opt.MapFrom(src => src.ModelId.ToString()) 
    ) 
    .ForMember(
     dest => dest.Text, opt => opt.MapFrom(src => src.Description) 
    ); 

và sau đó khi bạn đã có bạn IEnumerable<FooModel> bạn sẽ đơn giản chuyển đổi nó thành một số IEnumerable<SelectListItem>:

IEnumerable<FooModel> models = ... 
IEnumerable<SelectListItem> viewModels = Mapper 
    .Map<IEnumerable<FooModel>, IEnumerable<SelectListItem>>(models); 

Một ví dụ thực tế hơn là nên có mô hình điểm sau đây:

public class MyViewModel 
{ 
    public string SelectedItemId { get; set; } 
    public IEnumerable<SelectListItem> Items { get; set; } 
} 

Vì vậy bây giờ hành động điều khiển của bạn có thể trông như thế này:

public ActionResult Index() 
{ 
    IEnumerable<FooModel> items = ... 
    var viewModel = new MyViewModel 
    { 
     Items = Mapper.Map<IEnumerable<FooModel>, IEnumerable<SelectListItem>>(items) 
    }; 
    return View(viewModel); 
} 

và bên trong cái nhìn của bạn mạnh mẽ gõ:

@Html.DropDownListFor(
    x => x.SelectedItemId, 
    new SelectList(Model.Items, "Value", "Text") 
) 
+0

vì vậy bạn phải sử dụng các mục danh sách được chọn? Bạn có thể làm thế nào có SelectList trong mô hình xem thay vì phải làm cho nó trong xem? Cách bạn có nó là tốt chỉ tò mò nếu bạn có thể làm điều đó như tôi luôn luôn có chọn Danh sách trong mô hình xem của tôi. – chobo2

+0

Ngoài ra, "Giá trị" và "Văn bản" luôn là giá trị rỗng. Tôi không chắc tại sao. Trong mã của tôi, tôi ràng buộc không phải là một Danh sách các Mô hình mà là một danh sách các đối tượng miền của tôi. Vì vậy, có lẽ nó không thể phù hợp với những tên này (như tôi không có bất cứ điều gì gọi là "Giá trị" hoặc "Văn bản") là có một cách tôi có thể nói với nó những gì để sử dụng? – chobo2

+0

Tôi đoán phải sử dụng bản đồ tạo của bạn. Tôi nghĩ rằng nó đã được chỉ cho cách tùy chọn số 1 và tôi đang sử dụng số tùy chọn 2. Ngoài ra những gì "opt" đứng cho? Tùy chọn? – chobo2

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