2011-02-28 63 views
5

我有一个模型,该模型具有public List<string> Hour { get; set; } 和构造模型绑定下拉列表中选择值

public SendToList() 
    { 
     Hour = new List<string> { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" }; 
    } 

我的问题是,为什么我没有拿到一个选定值这个

@Html.DropDownListFor(model => model.Hour, Model.Hour.Select( 
       x => new SelectListItem 
       { 
        Text = x, 
        Value = x, 
        Selected = DateTime.Now.Hour == Convert.ToInt32(x) 
       } 
      )) 

但我在这里得到了一个选定的值。

@Html.DropDownList("Model.Hour", Model.Hour.Select( 
       x => new SelectListItem 
       { 
        Text = x, 
        Value = x, 
        Selected = DateTime.Now.Hour == Convert.ToInt32(x) 
       } 
      )) 

有什么区别?

回答

11

因为您需要将选定的值分配给您的模型。

所以我会建议你采用以下方法。让我们先从视图模型:

public class MyViewModel 
{ 
    // this will hold the selected value 
    public string Hour { get; set; } 

    public IEnumerable<SelectListItem> Hours 
    { 
     get 
     { 
      return Enumerable 
       .Range(0, 23) 
       .Select(x => new SelectListItem { 
        Value = x.ToString("00"), 
        Text = x.ToString("00") 
       }); 
     } 
    } 
} 

你可以填充控制器内该视图模型:

public class HomeController: Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      // Set the Hour property to the desired value 
      // you would like to bind to 
      Hour = DateTime.Now.Hour.ToString("00") 
     }; 
     return View(model); 
    } 
} 

,并在你看来简单:

@Html.DropDownListFor(
    x => x.Hour, 
    new SelectList(Model.Hours, "Value", "Text") 
) 
+0

感谢你为这个。使发送具有选定值的道具。爱范围声明,不知道它。我还可以在会议记录中使用它吗?我只想给出0,5,10的选项.... – 2011-02-28 13:18:21

+1

我知道它有点晚了,但要在您的评论中回答您的问题,您可以在where语句中进行模数化,例如.Where(x => x% 5 <= 0) – Sam 2011-08-11 12:35:17

相关问题