Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用日期时间选择器进行日期和时间验证(ASP.Net MVC Core v1.1)_Javascript_Jquery_Asp.net Mvc_Validation_Asp.net Core Mvc - Fatal编程技术网

Javascript 使用日期时间选择器进行日期和时间验证(ASP.Net MVC Core v1.1)

Javascript 使用日期时间选择器进行日期和时间验证(ASP.Net MVC Core v1.1),javascript,jquery,asp.net-mvc,validation,asp.net-core-mvc,Javascript,Jquery,Asp.net Mvc,Validation,Asp.net Core Mvc,我正在尝试使用弹出模式在日历中创建事件,但我在让jQuery验证处理事件的开始时间和结束时间字段时遇到问题。 我不知道如何对这两个字段进行相互验证,以便在开始时间之前结束时间无效 它似乎在窗体第一次弹出时显示的默认日期上部分工作,但如果我更改开始日期,它将停止工作。另一方面,试图验证日期的时间部分从未起作用 视图模型: public class EventViewModel { public int Id { get; set; } public string Title {

我正在尝试使用弹出模式在日历中创建事件,但我在让jQuery验证处理事件的开始时间和结束时间字段时遇到问题。
我不知道如何对这两个字段进行相互验证,以便在开始时间之前结束时间无效

它似乎在窗体第一次弹出时显示的默认日期上部分工作,但如果我更改开始日期,它将停止工作。另一方面,试图验证日期的时间部分从未起作用

视图模型:

public class EventViewModel
{
    public int Id { get; set; }

    public string Title { get; set; }

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

    [Required]
    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd HH:mm}")]
    [DateGreaterThan("Start", ErrorMessage = "End date has to be later than start date")]
    public DateTime End { get; set; }

    public string Color { get; set; }

    public bool AllDay { get; set; }

    [Required]
    public string StudentId { get; set; }

    [Required]
    public int LessonTypeId { get; set; }
}  
控制器:

public async Task<IActionResult> Index()
    {
        EventViewModel Event = new EventViewModel { Start = DateTime.Now, End = DateTime.Now.AddMinutes(30) };
        var user = await GetCurrentUserAsync();
        var studentList = await GetTeacherStudentsAsync(user);
        ViewData["StudentList"] = new SelectList(studentList, "Id", "FirstName");
        var lessonTypeList = _context.LessonTypes.Where(l => l.TeacherId.Equals(user.Id));
        ViewData["LessonTypeList"] = new SelectList(lessonTypeList, "LessonTypeId", "Description");
        return View(Event);
    }
公共异步任务索引()
{
EventViewModel Event=neweventviewmodel{Start=DateTime.Now,End=DateTime.Now.AddMinutes(30)};
var user=await GetCurrentUserAsync();
var studentList=await GetTeacherStudentsAsync(用户);
ViewData[“StudentList”]=新的选择列表(StudentList,“Id”,“FirstName”);
var lessonTypeList=_context.LessonTypes.Where(l=>l.TeacherId.Equals(user.Id));
ViewData[“LessonTypeList”]=新的选择列表(LessonTypeList、“LessonTypeId”、“描述”);
返回视图(事件);
}
索引视图:


$(文档).ready(函数(){
$(“#日历”).fullCalendar({
自定义按钮:{
创建按钮:{
文本:“新事件”,
单击:函数(){
$('#createModal').modal('show');
}
}
},
标题:{
左:“上一个,下一个今天创建按钮”,
中心:'标题',
右图:“月、agendaWeek、agendaDay、listWeek”
},
defaultView:“月”,
全天时段:错,
eventLimit:对,
是的,
导航链接:是的,
事件:“/Calendar/GetEvents”,
eventDrop:函数(事件、增量、恢复函数){
警报(event.title+已在“+event.start.format()”上删除);
如果(确认(“您确定要进行此更改吗?”)){
SaveEvent(事件);
}否则{
revertFunc();
}
},
eventResize:函数(事件、增量、恢复函数){
警报(event.title+”现在从“+event.start.format()+”变为“+event.end.format());
如果(确认(“您确定要进行此更改吗?”)){
SaveEvent(事件);
}否则{
revertFunc();
}
}
});
$.validator.addMethod(“laterThan”,函数(值、元素、参数){
var start=params.split(“”);
var startDate=新日期(开始[0]);
var startTime=start[1]。拆分(“:”;
var end=value.split(“”);
var endDate=新日期(结束[0]);
var endTime=end[1]。拆分(“:”;
如果(开始日期==结束日期){
if(parseInt(startTime[0],10)=parseInt(endTime[0],10)){
返回parseInt(startTime[1],10)>parseInt(endTime[1],10);
}else if(parseInt(startTime[0],10)
对于您的案例,我认为最好的选择是“MVC万无一失的验证”。您可以对案例使用“大于”或“小于”数据注释。因此,在“End”属性的注释中可以有如下内容:

[GreaterThan("Start", ErrorMessage = "Expiry Date must be greater than Activation Date", PassOnNull = true)]

查看有关万无一失的更多信息。

因此,在对不同选项进行了几周的测试后,我意识到我已经完成了验证
        $.validator.addMethod("laterThan", function (value, element) {
            var startDate = new Date($("#Start").val());
            var endDate = new Date(value);

            return this.optional(element) || startDate < endDate;
        }, "End time must be later than start time");