2015-12-04 36 views
1

我在ASP.NET MVC 5项目中使用JQueryUI Datepicker。我希望用户在创建和编辑视图中以mm/dd/yy格式输入日期。这是我完成迄今:在ASP.NET MVC 5中嵌入日期格式5

这是我的模型:

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = 
    "{0:MM-dd-yyyy}", 
    ApplyFormatInEditMode = true)] 
public DateTime ProjectDeadline { get; set; } 

这是_Layout.cshtml jQuery代码:

<script type="text/javascript"> 
    $(function() { 
     $('.date-picker').datepicker({ dateFormat: "MM-dd-yy" }); 
    }) 
</script> 

在CREATE VIEW我有这样的: enter image description here

在编辑视图中我有此: enter image description here

如果我不碰编辑的日期和点击保存,我得到一个警告说:

现场ProjectDeadline必须是日期。

我尝试了很多可能性来获得我想要的东西,但这是我能得到的最好的。我在大部分尝试中都遇到错误。你能告诉我如何修复我的代码,以正确地在Date字段中获取mm/dd/yyyy格式吗?谢谢。

+0

您的错误与'jquery.validate.js'相关联。如果你不使用'mm/dd/yyyy'格式,那么你需要修改验证器。请参考[这个答案](http://stackoverflow.com/questions/27285458/jquery-ui-datepicker-and-mvc-view-model-type-datetime/27286969#27286969)举例 –

回答

5

我有这个问题多次,但我已经拿出CustomDateTimeModelBinder看起来在DisplayFormat属性,并将其绑定到模型:

// <summary> 
/// This makes the model binder able to find a custom datetime format 
/// </summary> 
public class CustomDateTimeModelBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var displayFormat = bindingContext.ModelMetadata.DisplayFormatString; 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 

     if (!String.IsNullOrEmpty(displayFormat) && value != null) 
     { 
      DateTime date; 
      displayFormat = displayFormat.Replace("{0:", String.Empty).Replace("}", String.Empty); 
      if (DateTime.TryParseExact(value.AttemptedValue, displayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) 
      { 
       return date; 
      } 

      bindingContext.ModelState.AddModelError(bindingContext.ModelName, String.Format("{0} is an invalid date format", value.AttemptedValue)); 
     } 

     return base.BindModel(controllerContext, bindingContext); 
    } 
} 

在应用程序启动时,电线起来:

ModelBinders.Binders.Add(typeof(DateTime?), new CustomDateTimeModelBinder());

+0

你的意思是,我应该连线它在Startup.Auth.cs中? – jason

+0

是或Global.asax,Startup.cs或你使用的是:-) – janhartmann

+0

谢谢你,我做了你所说的。我仍然遇到错误。它仍然说这不是一个有效的日期。我在jQuery和模型中更改为'mm-dd-yyyy' – jason

0

试数据的日期格式=为div日期选择器“MM-DD-YYYY”:

div class="input-group date date-picker" data-date-format="yyyy-mm-dd"> 
    @Html.EditorFor(model => model.ProjectDeadline, new {  htmlAttributes  = new { @class = "form-control", @maxlength = "10"} }) 
... 
/div>