<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      【翻譯】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

      主站蜘蛛池模板: 内射囯产旡码丰满少妇| 狼色精品人妻在线视频| 粉嫩少妇内射浓精videos| 人妻出轨av中文字幕| 国产三级精品三级在线看| 国产精品国产亚洲看不卡| 无码av不卡免费播放| 国产69精品久久久久久| 99999久久久久久亚洲| 亚洲粉嫩av一区二区黑人| 国产成人无码性教育视频| 国产午夜福利精品片久久| 新营市| 国产蜜臀久久av一区二区| 日韩有码av中文字幕| 亚洲精品成人区在线观看| 亚洲高清日韩专区精品| 日韩精品中文字幕有码| 国产亚洲精品成人aa片新蒲金| 2020国产欧洲精品网站| 亚洲国产精品毛片av不卡在线| 欧美成人精品手机在线| 性色av一区二区三区精品| 国产二区三区不卡免费| 国产精品免费AⅤ片在线观看| 国产精自产拍久久久久久蜜| 国产一区二区亚洲一区二区三区 | 无码日韩精品一区二区三区免费| 日韩有码中文字幕av| 精品不卡一区二区三区| 国产欧美综合在线观看第十页| 精品亚洲国产成人| 最近中文字幕mv免费视频| 97久久超碰精品视觉盛宴| 亚欧洲乱码视频在线专区| 午夜成人鲁丝片午夜精品| 国产精品女视频一区二区| 国产精品天天狠天天看| 国产精品高清视亚洲精品| 亚洲成人高清av在线| 午夜福利精品国产二区|