2011-11-01 41 views
7

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ở?

+0

Thử sử dụng lớp trừu tượng. – wnascimento

+1

Đó 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 đó. –

+0

Lời khuyên của Kaleb là tuyệt vời, Automapper/ViewModels là một lựa chọn tốt. – wnascimento

Trả lời

8

Trong các lớp cơ sở/trừu tượng và cụ thể, các thuộc tính, phương pháp, v.v ... có mặt. Mặt khác, giao diện được thực hiện. Quy tắc áp đặt bởi CLR.

Xem bài viết này giải thích về ModelBinding và mối quan hệ về sự khác biệt này (Giao diện lớp x).

http://bradwilson.typepad.com/blog/2011/08/interface-attributes-class-attributes.html

Tôi nghĩ đó là câu trả lời của bạn.

+1

Cảm ơn, đã xóa nó cho tôi. "Khóa học, nó cũng làm nảy sinh một loạt các câu hỏi: làm thế nào bây giờ tôi sẽ quản lý các lớp miền của tôi và các lớp mà quan điểm của tôi nên ràng buộc, nhưng chúng sẽ là thức ăn cho các câu hỏi SO trong tương lai! –

+1

Hãy xem [AutoMapper] (http://automapper.org/) để biết các lớp của bạn sẽ được ánh xạ tới những lớp nào. Tóm tắt nhanh: tạo các mô hình xem cụ thể (ví dụ: Xem mô hình) và ánh xạ các lớp miền của bạn tới các mô hình xem cụ thể bằng cách sử dụng một cái gì đó như 'AutoMapper'. Bạn cũng có thể tạo chất kết dính mô hình của riêng mình. –

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