1

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

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

有可能这样做吗?我也可以使用 Ajax 根据月份和年份设置正确的天数(注意闰年)。任何要参考的示例代码或文章都值得赞赏,因为我在这方面还很初级。谢谢你。

4

1 回答 1

1

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

为什么不使用属性来保存 DateTime 值并使用其他一些库为最终用户提供良好的日期选择体验?jQuery UI 日历是您能想到的一种选择。

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

将 DateTime 类型属性添加到您的 ViewModel

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

并且在您的 get 操作方法中,您可以将此视图模型的对象返回给视图。

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

使用此视图模型的强类型视图并使用 jQuery UI 日历获取日历。

 @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);
}
于 2012-04-17T16:24:51.637 回答