Tôi đang gặp nhiều khó khăn khi cố gắng gỡ lỗi tại sao MVC không ràng buộc chính xác trong một trường hợp cụ thể mà tôi có ...ASP.net MVC v2 - Gỡ lỗi các vấn đề về ràng buộc mô hình - BUG?
Về cơ bản, tôi có một hành động phức tạp mà lần lượt có một đứa trẻ phức tạp object - Activity.Location.State (Trường hợp Activity là đối tượng phức tạp mà hành động mong đợi, Location là một đối tượng con phức tạp và State chỉ là một chuỗi).
Bây giờ tôi đã thiết lập một dự án thử nghiệm theo như tôi có thể biết chính xác kịch bản thực sự của tôi, trong trường hợp thử nghiệm này, tác vụ ràng buộc ... Nhưng trong dự án thực sự của tôi, Vị trí ... Bằng cách đặt các điểm ngắt trong thuộc tính Locaiton tôi có thể nói rằng MVC đang truy lục đối tượng Vị trí phức tạp từ Hoạt động, nhưng không đặt bất kỳ thuộc tính nào ... HOẶC không đặt bất kỳ thuộc tính nào ...
Tôi đang cố gắng gỡ lỗi vấn đề nhưng Tôi cần truy cập vào các biểu tượng 2 bản xem trước MVC v2 mà tôi dường như không thể theo dõi ... Tôi muốn xem nó thực sự làm gì khi nó kéo ra đối tượng vị trí (vì một lý do nào đó tôi nghĩ rằng nó có thể bị lỗi nội bộ nhưng nuốt ngoại lệ).
Bất kỳ ý tưởng về những gì tôi có thể làm ở đây ...
Cheers Anthony
UPDATE:
Ok tôi đã làm những gì J.W. đề xuất và tham khảo trực tiếp dự án MVC ...
Tôi đã tìm thấy sự cố và có một sự khác biệt rất nhỏ mà tôi bỏ qua ... Như tôi thấy, MVC hiện không hỗ trợ nhiều cấp độ thừa kế INTERFACE khi nó đi kèm để mô hình ràng buộc ... Xem sau ...
//MODEL
public class Location : ILocation
{
...
}
public interface ILocation : ILocationCore
{
...
}
public interface ILocationCore //In my sample I didn't have this second level interface
{
...
//MVC doesn't find any of these properties
...
}
public class Activity : IActivity
{
...
}
public interface IActivity : IActivityCore
{
ILocation Location { get; set; } //MVC finds this and reads its meta type as an ILocation
//Also the implementation of this Location within Activity will always return a instance - our IoC takes care of that, so MVC should never have to create the instance
}
public interface IActivityCore
{
...
}
//CONTROLLER
public ActionResult Create(Activity activity)
{
}
Do đó những gì tôi đã thấy là MVC tìm Vị trí và đọc loại meta của nó như là một ILocation, nhưng khi GetModelProperties được chạy trong DefaultModelBinder sau xảy ra -
protected virtual PropertyDescriptorCollection GetModelProperties(ControllerContext controllerContext, ModelBindingContext bindingContext) {
return GetTypeDescriptor(controllerContext, bindingContext).GetProperties();
//This return no properties
}
protected virtual ICustomTypeDescriptor GetTypeDescriptor(ControllerContext controllerContext, ModelBindingContext bindingContext) {
return new AssociatedMetadataTypeTypeDescriptionProvider(bindingContext.ModelType).GetTypeDescriptor(bindingContext.ModelType);
//bindingContext.ModelType - is ILocation
}
Do đó tôi giả định vào thời điểm này TypeDescriptionProvider không hỗ trợ kiểu thừa kế này, điều mà tôi khá ngạc nhiên. Ngoài ra nhìn vào nguồn v1 nó trông như thế này đã được giới thiệu với v2 - nhưng v1 có thể không có thể hỗ trợ những gì tôi đang cố gắng làm anyway.
Tôi sẽ không nói rằng đây thực sự là lỗi, nhưng tôi đã thử thay thế giao diện của mình bằng các lớp cụ thể và nó hoạt động tốt. Do đó hành vi không thực sự là những gì tôi mong đợi và có một chút không nhất quán.
Bất kỳ suy nghĩ nào ??? Tôi đã nghĩ rằng sự thừa kế này không phải là tiêu chuẩn khá nhưng sẽ xảy ra thường xuyên đủ để được phục vụ. Cảm ơn vi đa trả lơi.
Chúc mừng
Giao diện không thể kế thừa, chỉ có các lớp học có thể. Giao diện xác định các yêu cầu thực hiện. Nếu bạn nói IFoo: IBar, bạn đang nói trình biên dịch "Bất kỳ lớp nào triển khai giao diện IFoo cũng phải triển khai giao diện IBar". – ScottKoon