Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# 需要在MVC中使用表单验证从服务器端验证日期时间_C#_Jquery_.net_Validation_Server Side - Fatal编程技术网

C# 需要在MVC中使用表单验证从服务器端验证日期时间

C# 需要在MVC中使用表单验证从服务器端验证日期时间,c#,jquery,.net,validation,server-side,C#,Jquery,.net,Validation,Server Side,我有一个客户端验证,它限制用户只在20年前的某个范围内输入日期。这很好用。但问题是,当用户将浏览器时间改回1年时,浏览器允许输入的日期范围大于20年。我们正在为此使用MVC。我们有4个选项卡,验证应该在第二个表单中进行,但当我们在表单中保存所有表单并在最后一个选项卡中调用服务器端时,就会发生服务器端调用。我怎样才能做到这一点 我已经在服务器端添加了一些验证,它从服务器端限制了用户,但这发生在用户单击提交时的最后一个选项卡中。我想要的是,当用户单击Next按钮时,或者至少在用户在第二个选项卡中输入

我有一个客户端验证,它限制用户只在20年前的某个范围内输入日期。这很好用。但问题是,当用户将浏览器时间改回1年时,浏览器允许输入的日期范围大于20年。我们正在为此使用MVC。我们有4个选项卡,验证应该在第二个表单中进行,但当我们在表单中保存所有表单并在最后一个选项卡中调用服务器端时,就会发生服务器端调用。我怎样才能做到这一点

我已经在服务器端添加了一些验证,它从服务器端限制了用户,但这发生在用户单击提交时的最后一个选项卡中。我想要的是,当用户单击Next按钮时,或者至少在用户在第二个选项卡中输入日期值之后,我想要这个逻辑发生。我尝试的代码如下所示:

var enrolledVal = Convert.ToDateTime(model.enrolledValue);
var a = (today.Year * 100 + today.Month) * 100 + today.Day;
var b = (enrolledVal.Year * 100 + enrolledVal.Month) * 100 + enrolledVal.Day;
var enrolledYears = (a - b) / 10000;
if (enrolledYears > 20)
{
var error = new JsonErrorModel { ErrorCode = -1, ErrorMessage = "Enrolled Date Exceeded 20 years"};
return Json(error);
}

我想这可能会有帮助

获取注册日期的年份:

var enrolledVal = Convert.ToDateTime(model.enrolledValue).Year;
获取当前年份

var current = DateTime.Now.Year;
发现差异

var result = enrolledVal - current;

你可能把这个日期复杂化了时间有一年的属性。你可以从两个日期中减去两年来确定年份是否大于20。如果需要,可以向模型本身添加验证。编写验证测试可能会为您节省一些时间?这个链接是针对ASP.NET Core 2.2的,但是这个概念在ASP.NET MVC中已经存在了相当长的时间@杰克·斯特芬,谢谢。但是我需要在第二个选项卡(表单)执行这个逻辑。在“下一步”页面中单击按钮,只需将当前表单保存在前端,然后转到下一个选项卡,除此之外,服务器端不做任何操作。那么,将我的逻辑放在这里的最佳方法是什么呢?@KevinLamb,谢谢你的回答。在本文中,在“customattributes”下,我可以看到一个year参数被传递到该构造函数中。创建自定义属性类时,如何传递用户输入的动态值?请查看类似于您案例的内容。只需将表单绑定到模型属性,就可以获得模型中的值。这是你使用剃须刀的情况。谢谢你的回复。但即使是这种逻辑,我是否必须将其放入cshtml文件中,还是必须将其放入submit按钮单击逻辑中?如果submit按钮单击logic,则这将再次发生在第4个选项卡上。但我需要把它放在第二个标签上。请不要介意我的问题是愚蠢的还是过于简单,我还是个新手,我还在学习:-)我写这篇文章的想法是它将在服务器端运行。如果您想在客户端进行验证,您可以尝试以下方法:再次感谢您的快速响应。你认为是对的。我希望根据我的场景中的服务器日期验证输入日期。我们已经有了以下检查日期范围的逻辑<代码>[MandatoryField,Display(Name=“Enroller Year”)、数据类型(DataType.Date)、UIHint(“Date”)、日期范围(MaxDateString=“now”、MinOffsetString=“-20Y”)]公共虚拟日期时间?Enrolled year{get;set;}当用户将系统日期/时间更改为上一年时,最好控制用户可以输入的内容。由于应用程序占用当前的浏览器时间,用户可以从UI访问。因此,为了限制这一点,我们希望使用服务器日期进行验证。但是我们想显示的信息就在第二个选项卡上,而不必等到最后一个选项卡上他点击提交按钮。