【翻訳】ASP.NET MVC:Select List Itemsにビジネスオブジェクトを変換

5058 ワード

いくつかのビジネス・オブジェクトのClassをDropdown boxまたはSelectListにバインドすることが多く、ビジネス・オブジェクトには基本クラスがあります.この投稿では、ビジネスオブジェクトのベースクラスをどのように利用するかを説明し、少量のコードを書いて拡張方法でビジネスオブジェクトのASPへの変換を実現します.NET MVC上のSelect上.
BusinessBase、BaseEntity、その他のベースクラスは、コンテキストで簡単に使用できるように、すべてのビジネスクラスにベースクラスを設定するのが好きです.    NB!多くの人は、すべてのビジネスクラスにベースクラスを設定するのは良い注意だと言っています.データベースで同じ方法でベースクラスとmappingを行うことをお勧めしますが、ベースクラスを設定するのはいい人もいますが、データベースレベルで座っていることはお勧めしません(たとえば、あるビジネスオブジェクトには識別が含まれています).具体的に使うかは、あなた自身次第です.例を簡単にするために,非常に簡単なベースクラスを用いて実証したが,ベースクラスにはID属性が1つしかない.
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変換方法
リスト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つの方法でリロードする、1つはList、もう1つはIEnumerator.ほとんどの場合IListを使用していますが、別のリロードを提供しています.この拡張方法を使用すると、あなたのコードの中で、次のコードのようにToSelectListItems()拡張方法を使用することができます.
...
var model = new MyFormModel();
model.Statuses = _myRepository.ListStatuses().ToSelectListItems();
...

この拡張方法は、ベースクラスを継承するすべてのビジネスクラスで、リスト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