在ASP.NET MVC 5中粘贴日期格式

时间:2015-12-04 08:43:35

标签: jquery asp.net asp.net-mvc date asp.net-mvc-5

我在ASP.NET MVC 5项目中使用JQueryUI Datepicker。我希望用户在“创建”和“编辑”视图中以mm / dd / yy格式输入日期。这是我到目前为止所取得的成就:

这是我的模特:

[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>

在创建视图中我有这个: enter image description here

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

如果我没有在编辑中触摸日期并点击保存,我会收到警告:

  

字段ProjectDeadline必须是日期。

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

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

尝试data-date-format =&#39; mm-dd-yyyy&#39;在div datepicker中:

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>

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>