2010-05-05 30 views
0

當我使用ViewData.ModelMetadata.Properties來循環屬性(使用其他Where(modelMetadata => modelMetadata.ShowForEdit && !ViewData.TemplateInfo.Visited(modelMetadata))),從而創建泛型編輯視圖,視圖模型的基類的屬性最後呈現。如何在爲通用編輯視圖使用ViewData.ModelMetadata.Properties時首先渲染視圖模型的基類的屬性

是否有可能使用一個聰明的OrderBy()或有另一種方法來獲取基類的屬性,然後子類'?

Reverse不會做的伎倆,因爲每個類的屬性的排序是完全正確的。

一個解決方法當然是組合+委派,但由於我們沒有mixin,它太un-dry恕我直言,爲什麼我尋求一個更好的解決方案,如果可能的話。

回答

0

我去了另一個不使用繼承的解決方案。

案件是;基於類型,只有屬性的子集應該是可編輯的。

我通過爲每種類型定義一組屬性lambda表達式來解決它。

0

查看ViewData.ModelMetadata.Properties我沒有看到任何顯示屬性是Model類還是其超類的一部分的信息。

一種方法是將屬性放在超類的屬性上。如果這是一個屬性「DisplayMeAtTheTop」,那麼它也可以被其他屬性使用,它必須位於頂部。

+0

在問我的問題之前,我發現了一篇博文(http://blog.maartenballiauw.be/post/2010/01/11/Ordering-fields-in-ASPNET-MVC-2-templated-helpers.aspx)作者創建一個Order(int)屬性以控制排序。 我還調查了ModelMetadata的屬性,但找不到任何有用的OrderBy,但希望我忽略了一些東西。 我希望找到比自定義屬性更簡單的解決方案,但至少有一種方法可以解決問題。 – 2010-05-06 07:28:09

+0

有趣的帖子。這個排序的東西應該在默認的MetaDataProvider中。它非常重要。 – 2010-05-06 09:03:26