用于构建DateTime的MVC中的月,日,年下拉列表

时间:2012-04-17 16:15:38

标签: asp.net-mvc asp.net-mvc-3

我必须在视图中从三个下拉列表中构建一个DateTime对象。构建模型绑定对于我现在的MVC知识水平来说有点过于复杂(我通读了几篇文章)。我也不必绑定到DateTime属性,而是可以从ViewModel属性构建我的对象:

public IEnumerable<SelectListItem> Months
public IEnumerable<SelectListItem> Days
public IEnumerable<SelectListItem> Years

有可能这样做吗?我也许也可以使用Ajax设置适当的天数,具体取决于月份和年份(照顾闰年)。任何样本代码或文章都可以参考,因为我还是很喜欢这个东西。谢谢。

1 个答案:

答案 0 :(得分:1)

模型绑定很容易。不要害怕。强类型视图使您的代码保持清洁,以便将来可读性和可维护性。 Microsoft为我们这样的人发布了这些新功能。我们不应该害怕那些!

为什么没有Property来保存DateTime值并使用其他一些库来为最终用户提供一个不错的日期选择体验? jQuery UI日历是您可以想到的一个选项。

http://jqueryui.com/demos/datepicker/

将DateTime类型属性添加到ViewModel

public class AlbumViewModel
{
  public int ID { set;get;}
  public DateTime CreatedDate { set;get;}
}

并且在您的get action方法中,您可以将此viewmodel的对象返回到View。

public ActionResult AddAlbum()
{
  AlbumViewModel objItem=new AlbumViewModel();
  return View(objItem);
}

对此viewmodel使用强类型视图,并使用jQuery UI calandar获取日历。

 @model AlbumViewModel
 //include jQuery and jQuery UI 
 @using (Html.BeginForm())
 {
    <p>Select Date
     @Html.TextBoxFor(m=>m.CreatedDate)
     <input type="submit" value="Save" /> 
    </p>
 }
 <script type="text/javascript">
    $(function() {
      $( "#CreatedDate").datepicker();
    });
  </script>

并在你的帖子中

[HttpPost]
public ActionResult AddAlbum(AlbumViewModel objItem)
{
  //Check the objItem.CreatedDate here. Save it or do whatever you want 
  return View(objItem);
}