2011-09-04 110 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