2012-05-04 36 views
6

Hi all Tôi có một lớp cơ sở gọi là xe và tôi có tất cả các thuộc tính chung cho tất cả các xe trong đó và tôi có nhiều lớp học có nguồn gốc được gọi là xe hơi, xe Jeep mà xuất phát từ xe và thêm nhiều thuộc tínhMô hình ASP.NET MVC 3.0 ràng buộc với các lớp cơ sở và có nguồn gốc?

Ex:

public class Vehicle 
{ 
    public int Color { get; set; } 
    public double Cost { get; set; } 
} 


public class Car : Vehicle 
{ 
    public SelectListItem Option { get; set; } 
} 

tôi có trang một lớp học trong đó tôi có một danh sách các loại xe như thế này

public class Page 
{ 
    public List<Vehicle> vehicles { get; set; } 
} 

Quan điểm của tôi là loại mạnh mẽ với trang lớp như vậy trong quan điểm của tôi tôi đang Looping trên tất cả các phương tiện để hiển thị trên trang như thế này, mã này là bên trong @using (Html.BeginForm()) để chúng tôi gửi lại các lựa chọn sử dụng

for(int i=0;i<Model.Vehicles.Count;i++) 
{ 
    <div id="Question"> 
     @{ 
      @Html.EditorFor(m => m.Vehicle[i], VehicleConstants.GetTemplateName(Model.Questions[i])); 
     } 
    <br /> 
    </div> 
} 

Tôi đang sử dụng một mẫu Editor cho từng loại xe nên VehicleConstants.GetTemplateName chức năng cuộc gọi chỉ trả về tên của mẫu để sử dụng dựa trên các loại xe

mẫu này chỉ đơn giản là viết các tài sản trên lớp xe hoặc lớp Jeep (lớp Derived + lớp Base)

vấn đề tôi đang gặp là khi hình thức là Tôi chỉ có thể truy cập vào các thuộc tính của lớp cơ sở xe trong bộ điều khiển của tôi Tôi không thể có được giá trị cho các thuộc tính của xe hạng nhỏ hoặc xe Jeep.

 [HttpPost] 
    public string ReadPost(Page page) 
    { 
    } 

Cách tốt nhất để nhận các giá trị này được tự động xác nhận khi biểu mẫu được đăng lại là gì?

Tạo tùy chọn Binder Class tùy chọn duy nhất của tôi? Là như vậy có thể ai đó cung cấp cho tôi một số mẫu mã như thế nào để làm điều này? Bất kỳ giúp đỡ nhiều đánh giá cao.

Trả lời

6

Bạn sẽ phải sử dụng một chất kết dính mô hình tùy chỉnh cho việc này. Trình kết nối mô hình mặc định không biết loại bê tông nào để khởi tạo. Bạn có thể bao gồm một trường ẩn bên trong mỗi hàng cho biết loại bê tông mà trình mô phỏng tùy chỉnh của bạn sẽ tạo ra. Tôi có shown this in action here. Bằng cách thông báo rằng bằng cách sử dụng quy ước đặt tên tiêu chuẩn, bạn có thể loại bỏ vòng lặp for mà bạn đang sử dụng cũng như phương thức VehicleConstants.GetTemplateName.

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