【翻譯】ASP.NET MVC:轉化業務對象到Select List Items上
2011-11-18 10:41 湯姆大叔 閱讀(6288) 評論(2) 收藏 舉報我們經常將一些業務對象的Class綁定到Dropdown box或Select List上,而且業務對象一般都會有基類。這篇帖子里我講展示給大家的是如何利用業務對象的基類,寫少量代碼用擴展方法實現轉換業務對象集合到ASP.NET MVC上的Select上。
BusinessBase, BaseEntity和其他基類
我喜歡為所有的業務類設置基類,以便于在上下文里我可以很容易地使用它們。
NB!很多人說為所有的業務類設置基類是不錯的注意,它們也建議在數據庫里用同樣的方式,以便和基類進行mapping,但是有的人設置基類很不錯,但是不建議在數據庫層面也坐這種事情(比如,所有的業務對象都要包含標識)。具體使用,還是取決于你自己。
為了讓例子簡單,我使用非常簡單的基類做演示,基類里只有一個ID屬性。
public class BaseEntity
{
public virtual long Id { get; set; }
}
現在基類里有了ID屬性,還有一個問題需要解決:怎么展示業務對象?只顯示ID顯然不夠友好,我們需要讓信息顯示得更加友好。我們可以聲明一個抽象屬性讓所有的子類都集成,但是為什么不用系統自帶的ToString()呢?只需要在業務對象里重寫它就OK了。
public class Product : BaseEntity
{
public virtual string SKU { get; set; }
public virtual string Name { get; set; }
public override string ToString()
{
if (string.IsNullOrEmpty(Name))
return base.ToString();
return Name;
}
}
當然,你也可以添加更多的功能和屬性到你的基類里,我們現在需要的就是:標識和業務對象展示給用戶看的信息。
List items轉換方法
現在我們可以寫一個方法來創建List items
public static class BaseEntityExtensions
{
public static IEnumerable<SelectListItem> ToSelectListItems<T>
(this IList<T> baseEntities) where T : BaseEntity
{
return ToSelectListItems((IEnumerator<BaseEntity>)
baseEntities.GetEnumerator());
}
public static IEnumerable<SelectListItem> ToSelectListItems
(this IEnumerator<BaseEntity> baseEntities)
{
var items = new HashSet<SelectListItem>();
while (baseEntities.MoveNext())
{
var item = new SelectListItem();
var entity = baseEntities.Current;
item.Value = entity.Id.ToString();
item.Text = entity.ToString();
items.Add(item);
}
return items;
}
}
可以看到,有2個方法重載,一個使用List<T>,一個使用IEnumerator<BaseEntity>.雖然大多數情況下我們都使用IList<T>,我還是提供了另外一個重載。
使用該擴展方法
在你的代碼里,你可以像下面的代碼一樣使用ToSelectListItems()擴展方法。
...
var model = new MyFormModel();
model.Statuses = _myRepository.ListStatuses().ToSelectListItems();
...
你可以在所有繼承該基類的業務類上都可以使用這個擴展方法來達到綁定數據到List item上的目的。
網友改進
public static IEnumerable<SelectListItem> ToSelectListItems<T>(this IEnumerable<T> baseEntities) where T : BaseEntity
{
return baseEntities.Select(x => new SelectListItem {
Value = x.Id.ToString(),
Text = x.ToString() });
}
原文地址:http://weblogs.asp.net/gunnarpeipman/archive/2011/11/10/asp-net-mvc-converting-business-objects-to-select-list-items.aspx
浙公網安備 33010602011771號