2012-05-11 177 views
3

我有一个开始时间日期的模型和一个结束时间日期:ASP .NET MVC,的DateTimePicker和jQuery验证

[Required] 
[DataType(DataType.DateTime)] 
public DateTime StartTime { get; set; } 

[Required] 
[DataType(DataType.DateTime)] 
public DateTime EndTime { get; set; } 

其使用这两个日期的当前视图具有以下形式:

@if (Roles.IsUserInRole("Teacher")) 
{ 
    <h2>AddSession</h2> 

    using (Html.BeginForm("SessionAdded", "Course", FormMethod.Post, new { id = "myform" })) 
    { 
     @Html.ValidationSummary(true) 
     <fieldset> 
      <legend>Add Session</legend> 
      <div class="editor-label"> 
       @Html.LabelFor(model => model.Name) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.Name) 
       @Html.ValidationMessageFor(model => model.Name) 
      </div> 
      <div class="editor-label"> 
       @Html.LabelFor(model => model.StartTime) 
      </div> 
      <div class="editor-field"> 
       @Html.TextBoxFor(model => model.StartTime, new { @class = "date" , id = "StartTime" }) 
       @Html.ValidationMessageFor(model => model.StartTime) 
      </div> 
      <div class="editor-label"> 
       @Html.LabelFor(model => model.EndTime) 
      </div> 
      <div class="editor-field"> 
       @Html.TextBoxFor(model => model.EndTime, new { @class = "date", id = "EndTime" }) 
       @Html.ValidationMessageFor(model => model.EndTime) 
      </div> 
      <p> 
       <input id="submit" type="submit" /> 
      </p> 
     </fieldset> 
    } 
} 

当我删除: <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>从我的看法我没有问题。

但是当我使用jquery.validate时,我的两个字段返回:Please enter a valid date.。我使用DateTimePicker for jQuery UI

我有如下的Javascript代码:

$(document).ready(function() { 

var datepickers = $('.date').datetimepicker({ 
    minDate: 0, 
    dateFormat: "dd/mm/yy", 
    timeFormat: "hh:mm", 
    onSelect: function (date) { 
     var option = this.id == 'StartTime' ? 'minDate' : 'maxDate'; 
     datepickers.not('#' + this.id).datepicker('option', option, date); 
    } 
}); 

$("#myform").validate({ 
    ignore: ".date" 
}) 

}); 

我想忽略jQuery验证了我的两个日期字段(类=“日期”),因为它会检查特定的日期格式,我必须用这个一个在我的应用程序中:dd/mm/yyyy hh:mm

我也试过做一个自定义的验证器,但没有成功。我总是得到Please enter a valid date错误...

感谢您的帮助,

埃德

回答

1

您可能需要的的CurrentCulture改变你使用作为你的日期格式之一。 Hanselman对此有一个不错的post。您是否使用MVC包含的不显眼的验证?

这将是你需要做的(在我的情况下,文化是GB)

web.config中的变化

<globalization culture="en-GB" uiCulture="en-GB" enableClientBasedCulture="false" /> 

的Global.asax

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); 

此外,您可以创建一个动作过滤器,以确保该动作在提交时获得了文化。

public class CultureAwareActionAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      base.OnActionExecuting(filterContext); 

      if (!string.IsNullOrEmpty(filterContext.HttpContext.Request["culture"])) 
      { 
       Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo(filterContext.HttpContext.Request["culture"]); 
      } 
     } 
    } 

,你只会增加您的方法声明中[CultureAwareAction]注释

(该过滤器是为Telerik的小组编写,用于处理在其控件本地化)

+0

是的我使用MVC上包含的unobstrusive验证。说实话,我并不真正了解我应该在哪里更改我的ASP .NET MVC项目中的CurrentCulture。 – ethd

+0

我试过/ <全球化uiCulture =“auto:fr-FR”culture =“auto:fr-FR”requestEncoding =“utf-8”responseEncoding =“utf-8”/> 在我的Web.config中,选择日期时间时总是会出现相同的错误。 – ethd

+0

我刚刚编辑答案 – pollirrata

2

我已经做到了这一点,并争取到的?跨多个客户端本地人的浏览器工作。如果你可以明确地说你只需要一种日期格式,你可以通过以下步骤来实现它。

包含一个名为Date的日期编辑器。在您的浏览CSHTML模板\共享\ EditorTemplates文件夹,看起来像这样:

@model DateTime? 
@Html.TextBox("", Model.HasValue ? Model.Value.ToString("dd/MM/yyyy") : "", new { @class = "date" }) 

包括一些JavaScript调用的日期选择器某处明智的,就像在一个共享的布局页面或共享脚本,看起来像这样:

$(document).ready(function() { 
    $('.date').datepicker({ dateFormat: "dd/mm/yy", firstDay: 1, maxDate: "+0d" }); 
    $.validator.methods.date = function() { return true; }; 
}); 

您可能需要改变validator.methods.date功能不只是返回true,但为了验证基于你的文化需求

最后,设置你的IIS设置的区域性设置,无论是在网络配置,作为pol lirrata,或者这可以在.Net全球化设置的IIS管理界面中完成。