2011-01-06 191 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>