我有不小的困難,更要調試爲什麼MVC是不是在給定的情況下,我有正確的結合...ASP.net MVC v2 - 調試模型綁定問題 - 錯誤?
基本上,我有我的動作,接收一個複雜的對象又具有一個複雜的孩子object - Activity.Location.State(其中Activity是動作期望的複雜對象,Location是複雜的子對象,State只是一個字符串)。
現在我建立了一個測試項目,據我所知可以準確地模擬我的實際場景,在這個測試案例中綁定工程...但在我的實際項目中,綁定到活動的作品,但不是位置...通過在Locaiton屬性中放置斷點,我可以告訴MVC正在從活動中檢索複雜的位置對象,但它不設置任何屬性...
我試圖調試問題,但我需要訪問我無法跟蹤的MVC v2預覽2個符號...我希望看到實際上它在抽出位置對象後究竟做了什麼(出於某種原因,我認爲它可能會在內部失敗但吞嚥例外)。
什麼,我可以在這裏做任何想法...
乾杯 安東尼
UPDATE:
好吧,我做了什麼J.W.建議並直接引用MVC項目...
我發現問題,並有一個非常小的差異,我忽略了...因爲我的結果我發現,MVC目前不支持多層次的INTERFACE繼承說到模型綁定...查看以下...
//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)
{
}
因此我發現是MVC找到位置並讀取其元類型作爲ILocation,但是當GetModelProperties是DefaultModelBinder中運行以下發生 -
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
}
因此,我假設在這一點上,TypeDescriptionProvider不支持這種繼承風格,我很驚訝。另外看看v1源代碼,它看起來像是在v2中引入的 - 但是v1可能無法支持我想要做的事情。
我不會說這是一個真正的錯誤,但我嘗試用具體的類替換我的接口,它工作正常。因此,行爲並不是我所期望的,並且有點不一致。
任何想法???我會認爲這種繼承不是很標準,但會經常發生,足以應付。謝謝回覆。
乾杯
接口不能繼承,只有類可以。接口指定實施要求。如果你說IFoo:IBar,你告訴編譯器「實現IFoo接口的任何類都必須實現IBar接口」。 – ScottKoon