建立MVC的月,日,年下拉日期时间

问题描述:

我必须从我的视图中的三个下拉列表中构建一个DateTime对象。建立模型绑定对于我现在的MVC知识水平来说有点过于复杂(我通读了一些文章)。除了我没有绑定到的DateTime属性,但可以而是来自视图模型的属性建立我的目标了:建立MVC的月,日,年下拉日期时间

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

是否可以这样做呢?我也可以用阿贾克斯根据月份和年份设置合适的天数(照顾闰年)。任何示例代码或文章引用赞赏,因为我还是这个东西的初级。谢谢。

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

为什么没有一个属性来保存日期时间值,并使用其他一些库到为最终用户提供了一个很好的日期选择体验? jQuery UI日历是您可以想到的一个选项。

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

DateTime类型属性添加到您的视图模型

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

,并在您取得动作的方法,你可以返回该视图模型的目的是查看。

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

对此视图模型使用强类型视图并使用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); 
} 
+0

不幸的是,jQuery的日期选择器是不是我可以在这里使用。我特别需要有三个下拉菜单,否则这不会成为问题。谢谢, – mishap 2012-04-17 16:29:01

+1

+1 - 肯定会推荐这个答案。重用已经存在的东西(尤其是像jQuery UI那样已经很好建立和支持的东西),而不是滚动自己的东西。 – JasCav 2012-04-17 16:31:17

+1

@Chuchelo - 我很好奇...为什么你不能使用jQuery datepicker? – JasCav 2012-04-17 16:32:36