Tôi đang bị bối rối bởi vấn đề này và tôi không chắc liệu đó có phải là sự thiếu hiểu biết về khung công tác MVC, khung công tác .NET hay không. Nhưng một số lời giải thích từ bất kỳ góc nào sẽ được đánh giá cao ở đây.Thuộc tính Giao diện thừa kế không được tìm thấy bởi Mô hình ràng buộc
Những gì tôi đang cố gắng làm: sử dụng ASP.NET MVC3 Model Binding để hiển thị các điều khiển HTML trong Chế độ xem. Cụ thể, tôi đang cố gắng liên kết với một giao diện hơn là một lớp cụ thể.
Lỗi: một ArgumentException "Không thể tìm thấy thuộc tính [blah]". được ném trong khi tải trang.
Mã:
Interface IFoundation
{
int Id { get; set; }
}
Interface IChild: IFoundation
{
string Name { get; set; }
}
Class Concrete: IChild
{
int Id { get; set; }
string Name { get; set; }
}
Quan điểm:
@model IChild
@Html.EditorFor(x => x.Id)
Khi tôi cố gắng để tải quan điểm, một ArgumentException được ném từ cuộc gọi đến EditorFor() nói rằng các tài sản Id không thể tìm. Tuy nhiên, nếu tôi thay thế liên kết với lớp bê tông, ràng buộc hoạt động tốt.
Vì vậy, không ai biết tại sao EditorFor() sẽ không thể giải quyết thuộc tính được thừa hưởng từ giao diện cơ sở?
Thử sử dụng lớp trừu tượng. – wnascimento
Đó là những gì tôi đã bắt đầu làm: viết các lớp trừu tượng triển khai các giao diện của tôi. Các lớp cụ thể của tôi sau đó có thể kế thừa và ghi đè các tóm tắt và (hiện tại) tôi cũng có các quan điểm ràng buộc với các tóm tắt. Không chắc chắn nếu ràng buộc với các lớp cơ sở trừu tượng sẽ làm việc cho các khung nhìn trong thời gian dài - Kaleb dưới đây gợi ý triển khai các lớp ViewModel cho ràng buộc. Tôi không muốn bắt đầu con đường đó vào lúc này, nhưng cuối cùng tôi cũng có thể đến đó. –
Lời khuyên của Kaleb là tuyệt vời, Automapper/ViewModels là một lựa chọn tốt. – wnascimento