2011-09-04 112 views
0

我想在我的MVC 3應用程序中實現jQuery日期選擇器。它在編輯模式下工作正常,但是當試圖在創建視圖中使用它時,我得到了空字典異常,它告訴我它不能接受空值並需要DateTime值。當然,這將是空的,你試圖創建一個新的領域。我怎樣才能使這個工作。使用模板實現jquery datepicker

+0

向我們展示一些代碼。你究竟得到了什麼異常? – krolik

回答

0

使用自定義幫手,即時通過在我的應用程序之一中使用下面的幫助程序很容易。

1.創建Helper類

namespace System.Web.Mvc.Html 
    { 
     public static class DatePickerHelper 
     { 
      public static string DatePicker(this HtmlHelper htmlHelper, string id, string name, string value) 
      { 
       StringBuilder sBuilder = new StringBuilder(); 
       sBuilder.AppendLine("<script language=\"javascript\" type=\"text/javascript\">"); 
       sBuilder.AppendLine("$(function() {"); 
       sBuilder.AppendLine("$(\"#" + id + "\").datepicker({"); 
       sBuilder.AppendLine("showOn: \"button\","); 
       sBuilder.AppendLine("buttonImage: \"/Content/images/icon-calendar.gif\","); 
       sBuilder.AppendLine("dateFormat: 'dd/mm/yy',"); 
       sBuilder.AppendLine("buttonImageOnly: true"); 
       sBuilder.AppendLine(" });"); 
       sBuilder.AppendLine("});"); 
       sBuilder.AppendLine("</script>"); 

       sBuilder.AppendLine("<input type=\"text\" value=\"" + value + "\" id=\"" + id + "\" name=\""+name+"\" class=\"SmallTextBox\" />"); 
       return sBuilder.ToString(); 
      } 
     } 
    } 
  1. 使用它像這樣在您的視圖(創建)在我的情況 我有控制器通話員工,一定要使用這種模式,如果你正在使用數據模型{ 「YouControllerName.PropertyName」 和 「YouControllerName_PropertyName」

    <%= Html.DatePicker( 「Employee_StartDate」, 「Employee.StartDate」, 「」)%>

  2. 爲編輯

    <%= Html.DatePicker( 「Employee_StartDate」, 「Employee.StartDate」,Model.Employee.StartDate.ToShortDateString())%>

+0

我不知道你在說什麼。我從來沒有讀過任何關於使用stringbuilder爲datepicker助手。雖然我很新,所以...... – James

1

我會使用EditorTemplate代替定製幫手

創建新的局部視圖Date.ascx並將其放置在\Views\Shared\EditorTemplates\

<%@ Control Language="C#" %> 
<%: Html.TextBox("", Model == null ? "" : ((DateTime)Model).ToString("yyyy-MM-dd"), new { @class = "datepicker", @readonly = "readonly" })%> 

適用於所有類型的產品DateTime

+0

此解決方案的工作原理。但是我發現你甚至不需要模板。只需將腳本放在_Layout.cshtml中即可。編輯和創建視圖的日期字段在特定控制器中相同。所以我只是這樣做了我的datepicker腳本。 $(「#HireDate,#EnrollmentDate,#StartDate」)。datepicker(); – James

+0

但是,您在每個頁面上都沒有'#HireDate','#EnrollmentDate',因此將此腳本放在_Layout.cshtml中並不是最佳解決方案。此外,您必須記住,每次使用日期字段添加新視圖時,都必須修改此腳本。 – krolik