Tôi hy vọng tôi không thiếu một thứ gì đó cực kỳ rõ ràng ở đây nhưng có lý do gì không?MVC3 Chất kết dính mô hình dao cạo và các bộ sưu tập được thừa hưởng
Cho phép nói rằng tôi muốn hiển thị danh sách được phân trang và hiển thị hộp tổ hợp và thêm nút ở trên nó (xử lý các danh sách đơn giản). lớp tham gia sẽ như thế nào:
public class PagedList<T> : List<T>
{
public int TotalCount { get; set; }
}
Và sau đó là một mô hình điểm cho rằng trông giống như:
public class MyViewModel : PagedList<ConcreteModel>
{
public IEnumerable<ChildModel> List { get; set; }
public int? SelectedChildModelId { get; set; }
}
Vì vậy, trong giao diện (Razor):
@model MyViewModel
@using (Html.BeginForm())
{
@Html.DropDownListFor(model => model.SelectedChildModelId, new SelectList(Model.List, "ChildModelId", "DisplayName"))
}
Và bộ điều khiển HttpPost hành động:
public ActionResult(MyViewModel viewModel)
{
...
}
Ở trên sẽ c ause viewModel trong ActionResult là null. Có một lời giải thích hợp lý cho nó? Từ những gì tôi có thể nói nó chỉ cụ thể để xem các mô hình kế thừa từ các bộ sưu tập.
Tôi biết tôi có thể làm việc đó với chất kết dính tùy chỉnh nhưng các thuộc tính liên quan là các loại nguyên thủy và thậm chí không có bất kỳ generics hoặc thừa kế nào.
Tôi đã làm lại các mô hình chế độ xem để có loại bộ sưu tập được kế thừa làm thuộc tính và khắc phục sự cố. Tuy nhiên, tôi vẫn gãi đầu vì sao chất kết dính lại vỡ ra. Bất kỳ ý kiến xây dựng nào được đánh giá cao.
Tôi đã gặp khó khăn đối với các mô hình chế độ xem khai báo thuộc tính có loại được thừa kế bộ sưu tập thay vì kế thừa từ một loại vì không tìm thấy giải pháp khả thi nào khác. Vấn đề duy nhất tôi có với phương pháp này là nó phức tạp những thứ cho AutoMapper kể từ khi tài sản bây giờ đã được đặt rõ ràng thay vì được tự động ánh xạ. –
Câu trả lời tại [Stack Overlow] (http://stackoverflow.com/questions/5762302/why-cant-my-views-model-bind-with-my-generic-viewmodel-which-implements-an-inte) trông đầy hứa hẹn. Hmmm, Covariants - không bao giờ được sử dụng trước –