我有一個由許多用戶控件組成的頁面。該頁面的視圖模型相當複雜。在ASP.NET MVC中保留ViewModels
public class ComplexViewModel
{
public ObjectA ObjectAProperty { get; set; }
public List<Things> ListOfThings { get; set; }
public List<ThingCategories> ListOfThingCategories { get; set; }
public List<ThingTypes> ListOfThingTypes { get; set; }
public List<ThingOptions> ListOfThingOptions { get; set; }
public int ChosenThingCategoryId { get; set; }
public int ChosenThingTypeId { get; set; }
public int ChosenThingOptionId { get; set; }
public OtherObject ObjectData { get; set; }
}
此頁面還包含用於過濾的信息,排序的PostModel等
public class SimplePostModel
{
public int ChosenThingCategoryId { get; set; }
public int ChosenThingTypeId { get; set; }
public int ChosenThingOptionId { get; set; }
public int ChosenThingFilterTypeId { get; set; }
public int ChosenThingSortTypeId { get; set; }
public int ChosenThingOtherId { get; set; }
public int ChosenThingMoreId { get; set; }
public int ChosenThingOMGId { get; set; }
}
簡單PostModel被驗證,然後控制器打開3+庫使得多個呼叫到每個並生成視圖模型。說至少我的控制器行動已經變得相當大。
這是迄今爲止我工作過的最複雜的頁面,我很難決定如何使它更簡單。
我的第一個想法是創建一個視圖模型工廠,在綁定驗證後,將調用存儲庫並返回ViewModel。
然後我想到了創建一個自定義模型綁定器來驗證PostModel,然後在一個步驟中對ViewModel進行水合。
所以我的問題是你如何水合複雜的視圖模型?
而我寫這篇文章時,我想到了使用Html.RenderAction併爲構成頁面這個野獸的每個用戶控件創建一個模型。
更新:
的倉庫撥打電話到WCF服務中,該應用程序是一個更大的SOA拱的一部分。
我對此使用LINQ預測。如果(1)您的存儲庫返回'IQueryable',並且(2)您的持久層具有一流的LINQ實現,這將很有用。既然你沒有提供這方面的細節,我只想把你引到一個博客文章,我會更詳細地解釋這個想法。這些示例不使用存儲庫,但只要您的存儲庫返回'IQueryable',這個想法就完全相同。 http://blogs.teamb.com/craigstuntz/2009/12/31/38500/無論如何,請看看它是否有幫助。 –
2010-01-20 13:55:05