2016-11-14 74 views
0

我有一个DropDownListFor月号的静态列表,如果我选择的第一个月1,使编辑会发现DropDownListFor重复正月这样 enter image description here如何使DropDownListFor不使用静态列表重复数据库数据?

DropDownListFor代码:

    @Html.DropDownListFor(model=>model.FinancialInfo.FinancialExpiryMonth, (IEnumerable<SelectListItem>)ViewBag.FinancialMonths, (Model.FinancialInfo == null || Model.FinancialInfo.ExpiryDate == null) ? String.Empty : Model.FinancialInfo.ExpiryDate.Value.Month.ToString(), new { @class = "description-text" }) 

注:FinancialInfo.FinancialExpiryMonth是使其成为View模型的元数据元素。

守则ViewBag.FinancialMonths的:

 ViewBag.FinancialMonths = ListOfNumbers(1, 12).Select(m => new SelectListItem { Text = m.ToString(), Value = m.ToString() });` 

的ListOfNumbers的代码:

public List<int> ListOfNumbers(int startNum, int endNum) 
    { 
     List<int> listOfNumbers = new List<int>(); 
     for (int i = startNum; i <= endNum; i++) 
     { 
      listOfNumbers.Add(i); 
     } 
     return listOfNumbers; 
    } 
+2

对不起,您的问题是什么? – Richard

+0

'新的SelectList(Enumerable.Range(1,12))'是你所需要的。 –

+0

我喜欢用这个Enumerable.Range但我需要从第一个元素显示数据库中选择的项目,作为然后你只需设置FinancialExpiryMonth'财产'的值以匹配您在GET想选择的选项列表中选择 –

回答

1

第一个 “1”,你看到的是一个占位符,它是由

(Model.FinancialInfo == null || Model.FinancialInfo.ExpiryDate == null) ? String.Empty : Model.FinancialInfo.ExpiryDate.Value.Month.ToString() 
产生

将下拉定义替换为:

@Html.DropDownListFor(model=>model.FinancialInfo.FinancialExpiryMonth, (IEnumerable<SelectListItem>)ViewBag.FinancialMonths, "Please select...", new { @class = "description-text" }) 

你会看到“请选择...”作为占位符

为了使预先选择每月只分配值model.FinancialInfo.FinancialExpiryMonth

+0

但我需要选择的项目从数据库中,如果我做编辑,你的代码意味着我的用户必须重新输入日期,在事实,他已经选择它 –

+0

为了使预先选择每月只需把值赋给'模型。 FinancialInfo.FinancialExpiryMonth'在控制器操作中创建模型,然后将其传递到视图中 –

0

只是使用拉姆达expresion在Enumerable.Range并选择所选条件为真时,型号有一个值

    @Html.DropDownListFor(model => model.FinancialInfo.FinancialExpiryMonth, Enumerable.Range(1, 12).Select(x => new SelectListItem 
      { 
       Value = x.ToString(), 
       Text = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x), 
       Selected = (Model.FinancialInfo == null || Model.FinancialInfo.ExpiryDate == null) ? false : true 
      }), "Month", new { @class = "description-text" })