1.建議使用這種方法private static readonly string DEFAULT_VALUE= "請選擇";List<SelectListItem> levels = newList<SelectListItem>();levels.Add(new SelectListItem { Text =DEFAULT_VALUE, Value = DEFAULT_VALUE });levels.AddRange(newList<SelectListItem>() { new SelectListItem { Text = "銷售人員", Value ="1" }});ViewBag.Levels = levels;@Html.DropDownListFor(model =>model.Level, ViewBag.Levels as IEnumerable<SelectListItem>) 2. List<SelectListItem> areas = areaBo.Find(c =>c.Valid == (Int32)IsValidStatus.Valid) .Select(c => newSelectListItem { Text = c.Name, Value = c.Id.ToString() }) .OrderBy(c => c.Text) .ToList(); areas.Insert(0, item); <td colspan="3" class="left" style="vertical-align:middle;"> @Html.DropDownList("Area", @ViewBag.Area asIEnumerable<SelectListItem>) </td>
Area是一個實體的一個屬性,伺服器端擷取值的時候直接是model名字.值;
由於使用第二種方法重構前的代碼
#region 查詢條件設定 public void SetRegionWhere(string type = "f1ormu") { #region 得到資料庫資料 IEnumerable<SalesTerritory> territories = null; int staffId = LoginHelper.GetID(); territories = boTerritory.Find(t => t.ManagerId == staffId && t.State == (Int32)IsValidStatus.Valid); Staff staffEntity = boStaff.FindByKey(LoginHelper.GetID()); List<SelectListItem> filiales = boFiliale .Find(f => f.Valid == (Int32)IsValidStatus.Valid) .Select(f => new SelectListItem { Text = f.Name, Value = f.Id.ToString() }) .OrderBy(f => f.Text) .ToList(); filiales.Insert(0, item); List<SelectListItem> clusters = boCluster .Find(c => c.Valid == (Int32)IsValidStatus.Valid) .Select(c => new SelectListItem { Text = c.ClusterName, Value = c.Id.ToString() }) .OrderBy(c => c.Text) .ToList(); clusters.Insert(0, item); //擷取當前登入使用者對應的所有銷售代碼 List<SelectListItem> salescodes = boTerritory.Find(n => n.ManagerId == -2238).Distinct() .Select(s => new SelectListItem { Text = s.SalesCd, Value = s.Id.ToString() }).ToList(); salescodes.Insert(0, item); List<SelectListItem> areas = areaBo.Find(c => c.Valid == (Int32)IsValidStatus.Valid) .Select(c => new SelectListItem { Text = c.Name, Value = c.Id.ToString() }) .OrderBy(c => c.Text) .ToList(); areas.Insert(0, item); #endregion #region if (type == "email") { if (Session[sessionEmailList] != null) { ViewEmailSiteCodeSearchCriteria wheremode = Session[sessionEmailList] as ViewEmailSiteCodeSearchCriteria; if (!string.IsNullOrWhiteSpace(wheremode.Area.ToString())) { ViewBag.Area = new SelectList(areas, "Value", "Text", wheremode.Area); } else { ViewBag.Area = areas; } if (!string.IsNullOrWhiteSpace(wheremode.Cluster.ToString())) { ViewBag.Cluster = new SelectList(clusters, "Value", "Text", wheremode.Cluster); } else { ViewBag.Cluster = clusters; } if (!string.IsNullOrWhiteSpace(wheremode.Filiale.ToString())) { ViewBag.Filiale = new SelectList(filiales, "Value", "Text", wheremode.Filiale); } else { ViewBag.Filiale = filiales; } if (!string.IsNullOrWhiteSpace(wheremode.SalesCode.ToString())) { ViewBag.SalesCode = new SelectList(salescodes, "Value", "Text", wheremode.SalesCode); } else { ViewBag.SalesCode = salescodes; } return; } } if (type == "sms") { if (Session[sessionEmailList] != null) { ViewSmsSiteCodeSearchCriteria wheremode = Session[sessionSMSList] as ViewSmsSiteCodeSearchCriteria; if (!string.IsNullOrWhiteSpace(wheremode.Area.ToString())) { ViewBag.Area = new SelectList(areas, "Value", "Text", wheremode.Area); } else { ViewBag.Area = areas; } if (!string.IsNullOrWhiteSpace(wheremode.Cluster.ToString())) { ViewBag.Cluster = new SelectList(clusters, "Value", "Text", wheremode.Cluster); } else { ViewBag.Cluster = clusters; } if (!string.IsNullOrWhiteSpace(wheremode.Filiale.ToString())) { ViewBag.Filiale = new SelectList(filiales, "Value", "Text", wheremode.Filiale); } else { ViewBag.Filiale = filiales; } if (!string.IsNullOrWhiteSpace(wheremode.SalesCode.ToString())) { ViewBag.SalesCode = new SelectList(salescodes, "Value", "Text", wheremode.SalesCode); } else { ViewBag.SalesCode = salescodes; } return; } } if (type == "f1") { if (Session[sessionF1List] != null) { ViewF1SiteCodeSearchCriteria wheremode = Session[sessionF1List] as ViewF1SiteCodeSearchCriteria; if (!string.IsNullOrWhiteSpace(wheremode.Area.ToString())) { ViewBag.Area = new SelectList(areas, "Value", "Text", wheremode.Area); } else { ViewBag.Area = areas; } if (!string.IsNullOrWhiteSpace(wheremode.Cluster.ToString())) { ViewBag.Cluster = new SelectList(clusters, "Value", "Text", wheremode.Cluster); } else { ViewBag.Cluster = clusters; } if (!string.IsNullOrWhiteSpace(wheremode.Filiale.ToString())) { ViewBag.Filiale = new SelectList(filiales, "Value", "Text", wheremode.Filiale); } else { ViewBag.Filiale = filiales; } if (!string.IsNullOrWhiteSpace(wheremode.SalesCode.ToString())) { ViewBag.SalesCode = new SelectList(salescodes, "Value", "Text", wheremode.SalesCode); } else { ViewBag.SalesCode = salescodes; } return; } } if (type == "mu") { if (Session[sessionF1List] != null) { ViewMUSiteCodeSearchCriteria wheremode = Session[sessionF1List] as ViewMUSiteCodeSearchCriteria; if (!string.IsNullOrWhiteSpace(wheremode.Area.ToString())) { ViewBag.Area = new SelectList(areas, "Value", "Text", wheremode.Area); } else { ViewBag.Area = areas; } if (!string.IsNullOrWhiteSpace(wheremode.Cluster.ToString())) { ViewBag.Cluster = new SelectList(clusters, "Value", "Text", wheremode.Cluster); } else { ViewBag.Cluster = clusters; } if (!string.IsNullOrWhiteSpace(wheremode.Filiale.ToString())) { ViewBag.Filiale = new SelectList(filiales, "Value", "Text", wheremode.Filiale); } else { ViewBag.Filiale = filiales; } if (!string.IsNullOrWhiteSpace(wheremode.SalesCode.ToString())) { ViewBag.SalesCode = new SelectList(salescodes, "Value", "Text", wheremode.SalesCode); } else { ViewBag.SalesCode = salescodes; } return; } } #endregion ViewBag.Area = areas; ViewBag.Cluster = clusters; ViewBag.Filiale = filiales; ViewBag.SalesCode = salescodes; }
重構後的方法1 方法
#region 查詢條件設定 public void SetRegionWhere() { #region 得到資料庫資料 IEnumerable<SalesTerritory> territories = null; int staffId = LoginHelper.GetID(); territories = boTerritory.Find(t => t.ManagerId == staffId && t.State == (Int32)IsValidStatus.Valid); Staff staffEntity = boStaff.FindByKey(LoginHelper.GetID()); List<SelectListItem> filiales = boFiliale .Find(f => f.Valid == (Int32)IsValidStatus.Valid) .Select(f => new SelectListItem { Text = f.Name, Value = f.Id.ToString() }) .OrderBy(f => f.Text) .ToList(); filiales.Insert(0, item); List<SelectListItem> clusters = boCluster .Find(c => c.Valid == (Int32)IsValidStatus.Valid) .Select(c => new SelectListItem { Text = c.ClusterName, Value = c.Id.ToString() }) .OrderBy(c => c.Text) .ToList(); clusters.Insert(0, item); //擷取當前登入使用者對應的所有銷售代碼 List<SelectListItem> salescodes = boTerritory.Find(n => n.ManagerId == -2238).Distinct() .Select(s => new SelectListItem { Text = s.SalesCd, Value = s.Id.ToString() }).ToList(); salescodes.Insert(0, item); List<SelectListItem> areas = areaBo.Find(c => c.Valid == (Int32)IsValidStatus.Valid) .Select(c => new SelectListItem { Text = c.Name, Value = c.Id.ToString() }) .OrderBy(c => c.Text) .ToList(); areas.Insert(0, item); #endregion ViewBag.Area = areas; ViewBag.Cluster = clusters; ViewBag.Filiale = filiales; ViewBag.SalesCode = salescodes; } #endregion
在control返回的時候需要返回model既可以
[HttpPost] public ActionResult EmailList(int? page, ViewEmailSiteCodeSearchCriteria wheremodel) { //載入頁面的查詢資訊 SetRegionWhere(); CreateSentResultList("email"); if (wheremodel.IsSearch == 1) { Session[sessionEmailList] = wheremodel; GetEmailList(wheremodel, 1); } return View("EmailList", wheremodel); }