3

我有一个带有 StartTime 日期和 EndTime 日期的模型:

[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 用于 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"
})

});

我想忽略对我的两个日期字段(class="date")的 jQuery 验证,因为它检查特定的日期格式,我必须在我的应用程序中使用这个:dd/mm/yyyy hh:mm

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

谢谢你的帮助,

埃德

4

2 回答 2

2

我已经做到了这一点,并努力让它在多个本地客户端的浏览器中工作。如果您可以明确地说您只需要一种日期格式,您可以通过以下步骤实现它。

在您的 Views\Shared\EditorTemplates 文件夹中包含一个名为 Date.cshtml 模板的日期编辑器,如下所示:

@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 设置设置为文化设置,可以在 Web 配置中设置为 pollirrata,也可以在 .Net 全球化设置中的 IIS 管理 UI 中完成。

于 2012-05-11T21:10:03.417 回答
1

您可能需要将 CurrentCulture 更改为您使用的日期格式。Hanselman 有一篇关于它的好帖子。您是否使用 MVC 中包含的不显眼的验证?

这将是您需要做的更改(在我的情况下,文化适用于 GB)

网络配置

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

全球.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 团队编写的,用于在他们的控件中处理本地化)

于 2012-05-11T17:21:20.290 回答