Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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
C# ASP MVC日期时间验证错误_C#_Jquery_Asp.net Mvc_Jquery Ui_Jquery Ui Datepicker - Fatal编程技术网

C# ASP MVC日期时间验证错误

C# ASP MVC日期时间验证错误,c#,jquery,asp.net-mvc,jquery-ui,jquery-ui-datepicker,C#,Jquery,Asp.net Mvc,Jquery Ui,Jquery Ui Datepicker,在asp.net MVC 5中,我有一个显示DTO对象数据的表单: public class FieldDTO { [DataType(DataType.DateTime)] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] public DateTime StartFieldDate { get; set; } [DataType(DataTyp

在asp.net MVC 5中,我有一个显示DTO对象数据的表单:

public class FieldDTO
{
    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime StartFieldDate { get; set; }

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

    public String FieldName { get; set; }

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

    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime StopJob { get; set; }
}
在我的控制器类中,我有:

public ActionResult Create()
{
   var model = new FieldDTO();
   model.StartFieldDate = DateTime.Now;
   model.StopFieldDate = DateTime.Now;
   model.StartJob = DateTime.Now;
   model.StopJob = DateTime.Now;
   ...
   ...
}
我认为:

<div class="col-md-10">
     @Html.EditorFor(model => model.StartFieldDate, new { htmlAttributes = new { @class = "form-control datepicker" } })
     @Html.ValidationMessageFor(model => model.DataTurno, "", new { @class = "text-danger" })
 </div>

@EditorFor(model=>model.StartFieldDate,new{htmlAttributes=new{@class=“form control datepicker”})
@Html.ValidationMessageFor(model=>model.DataTurno,“,new{@class=“text danger”})
另外,我对另一个
datetime
控制器有相同的razor代码。我为jQueryUIDatePicker添加了
datepicker

在表单中,如果我单击“创建”按钮,而不修改任何控件,则一切正常。 当我更改最后两个
datetime
选择器中的一个,然后单击“创建”按钮时,我得到验证错误:
字段xxxx必须是日期。


我不知道问题出在哪里,因为所有控件都是以相同的方式生成的。

jQuerydatepicker的日期格式,如@ataravati

尝试使用
dateFormat
选项初始化日期选择器,如下所示:

$(".datepicker").datepicker({ dateFormat: 'dd/mm/yyyy' });
//this how to get what is it now
var dateFormat = $(".datepicker").datepicker("option", "dateFormat");
//set right format
$(".datepicker").datepicker("option", "dateFormat", "dd/mm/yyyy");
在init之后调试或设置
dateFormat
选项,如下所示:

$(".datepicker").datepicker({ dateFormat: 'dd/mm/yyyy' });
//this how to get what is it now
var dateFormat = $(".datepicker").datepicker("option", "dateFormat");
//set right format
$(".datepicker").datepicker("option", "dateFormat", "dd/mm/yyyy");

有许多潜在的问题

首先,
[DataType(DataType.DateTime)]
[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:dd/MM/yyyyy}”)]
属性仅在使用
@Html.EditorFor()
时适用,并用于呈现HTML5日期选择器的浏览器实现(它添加了
type=“date”
属性)。由于您使用的是jQueryUI日期选择器,因此这些属性不是必需的。在任何情况下,如果您确实需要浏览器HTML5日期选择器,那么格式必须是
DataFormatString=“{0:yyyy-MM-dd}”
(ISO格式)才能正常工作。另请注意,HTML5日期选择器仅在现代浏览器中受支持,而在FireFox()中则完全不受支持

如果您使用jQueryUI日期选择器,那么它可以

@Html.TextBoxFor(m=>m.StartFieldDate,新的{@class=“form control datepicker”})
并在datepicker脚本中设置格式

$('.datepicker').datepicker({dateFormat:'dd/mm/yy'});
验证消息可能来自以下两个问题之一。在客户端,
jquery validate.js
使用
MM/dd/yyyy
格式验证日期。您可以通过包括或添加以下脚本来覆盖该脚本以使用
dd/MM/yyyy

$.validator.addMethod('date',函数(值,元素){
if(此.可选(元素)){
返回true;
}
var valid=true;
试一试{
$.datepicker.parseDate('dd/mm/yy',值);
}
捕捉(错误){
有效=错误;
}
返回有效;
});
$('.datepicker').datepicker({dateFormat:'dd/mm/yy'});
另一个潜在问题是服务器端验证。如果服务器区域性不接受格式为
dd/MM/yyyy
(例如
)的日期,则可能会在服务器上引发验证错误,在这种情况下,您需要为
DateTime
创建自定义
ModelBinder


旁注:我假设
@Html.ValidationMessageFor(m=>m.DataTurno,…)
是一个输入错误(您显示的模型不包括属性
DataTurno
),并且它实际上是
@Html.ValidationMessageFor(m=>m.StartFieldDate,…)
,因为日期时间的默认格式是mm/dd/yyyy。您的日期考虑为一个月,然后它会给您需要添加文法格式的错误。

        CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
        culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";

        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
在实现datepicker的js文件中,包含如下代码

jQuery.validator.methods["date"] = function (value, element) { return true; }

我有同样的问题,现在对我来说很好,我希望它能帮助您。

对我来说,只需编写以下代码即可编写默认的Jquery datetime验证:

$(function () {
   $.validator.methods.date = function (value, element) {
    return this.optional(element) || moment(value, "L", true).isValid();
   }
});

以防万一这发生在其他人身上。我最初有一个验证错误,因为我在swift中的iOS应用程序正在发送unix时间。我通过从请求体读取json的app.using块诊断出了这一点。然后,我将swift日期更改为iso,但它不起作用。我花了几个小时才意识到,一旦诊断代码读取了正文内容,其他任何东西都无法。。。因此,它生成了一个验证错误(但现在出于不同的原因)。如果有人碰巧以同样的方式偷看了你的内容,记得把它记下来。至少在.net core 2.2中,您不能在正文流上进行搜索。

您的jQuery日期选择器在哪里?这很可能是因为jQuery datepicker的日期格式。另外,在视图中,对于
model.StartFieldDate
ValidationMessageFor
对于
DataTurno
,可以使用
EditorFor