我必须在视图中从三个下拉列表中构建一个DateTime对象。构建模型绑定对于我现在的MVC知识水平来说有点过于复杂(我通读了几篇文章)。我也不必绑定到DateTime属性,而是可以从ViewModel属性构建我的对象:
public IEnumerable<SelectListItem> Months
public IEnumerable<SelectListItem> Days
public IEnumerable<SelectListItem> Years
有可能这样做吗?我也许也可以使用Ajax设置适当的天数,具体取决于月份和年份(照顾闰年)。任何样本代码或文章都可以参考,因为我还是很喜欢这个东西。谢谢。
答案 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);
}