2011-01-06 99 views
7

我在我的模型这一领域的jQuery日期时间选择器MVC3

[DataType(DataType.DateTime)] 
    [Required(ErrorMessage = "Expire is required")] 
    public DateTime Expire 
    { 
     get; 
     set; 
    } 

在我看来

@Html.EditorFor(model => model.Expire)) 
     @Html.ValidationMessageFor(model => model.Expire) 

和我创建DATATIME EditorTemplates

@inherits System.Web.Mvc.WebViewPage<System.DateTime> 
@Html.TextBox("", (Model.ToShortDateString()), new { @class = "datePicker" }) 
<script type='text/javascript'> 
    $(document).ready(function() { 
    $(".datePicker").datepicker({ 
     //  buttonImage: "/content/images/calendar.gif", 
     //  showOn: "both", 
     //  defaultDate: $("#calendar-inline").attr('rel') 
     showAnim: 'slideDown', 
     dateFormat: 'dd/mm/yyyy' 

    }); 
    }); 
</script> 

当我试图创建新项目我有这个错误信息

传递到 字典中的模型项目是空的,但这个 词典需要类型为“System.DateTime的”

我尝试

Model.HasValue ? Model.Value.ToString("MM/dd/yyyy") : DateTime.Today.ToShortDateString() 

但我一个非空模型 项目没有型号值检查

回答

6

请尝试以下操作之一:

  • 如果该操作是用于创建新对象的,则将新实例作为模型传递return View(new MyObject())
  • 变化@inherits System.Web.Mvc.WebViewPage<System.DateTime>@inherits System.Web.Mvc.WebViewPage<System.DateTime?>
2
@inherits System.Web.Mvc.WebViewPage<System.DateTime> 

应该

@inherits System.Web.Mvc.WebViewPage<System.DateTime?> 
1

只要把?在你的System.DateTime

例如:

@model System.DateTime? 

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, 
       new 
       { 
        data_datepicker = true 
       }) 

如果ommit的问号,您将GE错误

0

这是我的编辑模板的代码:问题的关键是避免空值:

@model DateTime? 


<script src="../../../Scripts/jquery-1.4.4.js" type="text/javascript"></script> 
<script src="../../../Scripts/jquery-ui.js" type="text/javascript"></script> 

      @Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : String.Empty), new { @class = "datePicker" }) 
<script type='text/javascript'> 
    $(document).ready(function() { 
     $(".datePicker").datepicker({ 
      //  buttonImage: "/content/images/calendar.gif", 
      //  showOn: "both", 
      //  defaultDate: $("#calendar-inline").attr('rel') 
      showAnim: 'slideDown', 
      dateFormat: 'dd/mm/yyyy' 

     }); 
    }); 
</script>