2009-09-24 81 views
0

我不確定這是一個錯誤還是一個功能。我有一個動作參數,它帶有一個帶有幾個字符串屬性的ListRequest對象。 .NET MVC忠實地將同名的查詢字符串參數映射到ListRequest對象的屬性。DefaultModelBinder:IList vs List

我添加了一個ListRequest.Filters屬性,這是從查詢字符串截取字符串列表:過濾器= foo的&過濾=酒吧

如果我宣佈.Filters作爲獲取/設置類型列表(Of String),DefaultModelBinder完全符合你的期望。但是,如果我將.Filters聲明爲IList(Of String)的Get/Set,則DefaultModelBinder會完全停止綁定到該屬性的值。

這是功能還是錯誤?

回答

0

聽起來像一個功能給我。模型聯編程序需要綁定的具體類型。

如果您告訴它綁定到一個接口,它將無法執行任何操作,因爲它無法實例化要綁定的接口。

編輯:有趣的

的源代碼來看,它似乎將綁定到一個模型,它是一個通用型的IEnumerable,ICollection的,IList的或IDictionary的,但它不會在模型的屬性綁定該是一種通用類型。

所以我不會說這是一個錯誤...我只是說,這是他們忽視的一個功能。 :-)

+0

但這並非完全正確。 如果我的行爲有一個參數(過濾器作爲IList(字符串)),它實際上工作。顯然,默認的模型綁定器已經對如何從查詢字符串/表單填充IList(Of T)做出了一些假設。 – claco 2009-09-24 20:23:10