[英]ASP.NET MVC: How do I handle a view model with many properties?
所以我有幾乎1:1的視圖比例來查看模型,事情似乎進展順利。 如果我正確理解他們的目的,那么看起來應該是視圖模型
在努力遵守這些原則時,我的報告控制器有點像牆。 為客戶生成的各種報告需要訪問大約30個左右的不同屬性。 因此,我的視圖模型最終看起來與我的實體模型非常相似。
當然,最簡單的解決方案是將實體模型傳遞給視圖,這樣我就可以訪問所有屬性,但是我還需要能夠為空白或“不完整”的客戶生成報告。 這會導致問題在嘗試訪問我的Entity模型上的導航屬性時將引用異常。
所以我可以對視圖中的每個字段使用空檢查,這看起來不太吸引人......或者我可以實現視圖模型以避免空引用異常。 問題是我最終得到了一個看起來像這樣的視圖模型:
var customer = customersRepository.GetCustomer(id);
var viewModel = new CustomersViewModel()
{
FirstName = customer.FirstName,
LastName = customer.LastName,
Address = customer.MailingAddress.Address,
City = customer.MailingAddress.City,
// and on and on for about 30 different properties
};
return View(viewModel);
輸入所有這些屬性是其中一個感覺錯誤的事情。 我錯過了一個更優雅的解決方案嗎?
問題是我最終會得到一個看起來像這樣的視圖模型
AutoMapper是必須避免編寫您發布的代碼的必要條件。 我還建議你觀看優秀的控制器來自AutoMapper的創建者的飲食視頻。 觀看完這段視頻后(以及您身邊的一點努力),您的控制器動作將減少到一個漂亮的一個班輪。
你一定要看看AutoMapper( http://automapper.codeplex.com/ )。
AutoMapper.Mapper.CreateMap(typeof(CustomersModel), typeof(CustomersViewModel));
AutoMapper.Mapper.CreateMap<CoolObject, CoolObjectViewModel>()
.ForMember(d => d.Property1, f => f.MapFrom(s => s.Property1))
.ForMember(d => d.Property2, f => f.MapFrom(s => s.Property2))
.ForMember(d => d.Property3, f => f.MapFrom(s => s.Property3));
輸入所有這些屬性是其中一個感覺錯誤的事情
對於你想要的級別,最終你必須輸入所有級別。
所以,我認為這種方法同樣可以。
我真的沒有得到你想要在這里實現的東西..編寫更多代碼沒有任何問題..只要它是具體和有條理的,你的代碼大小無關緊要。 您應該擔心的是如何減少數據庫交互,從數據庫中僅檢索所需的屬性。
因為您的代碼顯示您檢索整個客戶對象,然后最終顯示一些屬性,為什么不檢索您需要的屬性。
此外,如果您使用郵件地址的屬性,為什么不將整個mailingaddres對象作為屬性傳遞給您,為什么要拆分為其他屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.