提问人:user2083386 提问时间:6/5/2019 更新时间:6/5/2019 访问量:786
需要使用 MVC 中的表单验证从服务器端验证 DateTime
Need to validate the DateTime from server side using form validation in MVC
问:
我有一个客户端验证,它限制用户仅在 20 年后的特定范围内输入日期。这工作正常。但问题是,当用户将他的浏览器时间改回 1 年时,浏览器允许输入大于 20 年后的日期。为此,我们使用 MVC。我们有 4 个选项卡,其中此验证应以第二种形式进行,但是当我们将所有表单保存在表单中并在最后一个选项卡中调用服务器端时,就会发生服务器端调用。我怎样才能做到这一点?
我已经在服务器端添加了一些验证,将用户限制在服务器端,但是当用户单击提交时,这发生在最后一个选项卡中。我想要的是,当用户单击“下一步”按钮时,或者至少在用户在第二个选项卡中输入日期值后立即发生,我希望发生此逻辑。我尝试的代码如下:
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);
}
答:
1赞
Jake Steffen
6/5/2019
#1
我认为这可能会有所帮助
获取注册日期的年份:
var enrolledVal = Convert.ToDateTime(model.enrolledValue).Year;
获取当前年份
var current = DateTime.Now.Year;
寻找差异
var result = enrolledVal - current;
评论
0赞
user2083386
6/5/2019
感谢您的回复。但即使是这个逻辑,我是否必须把它放在cshtml文件中,还是必须把它放在提交按钮点击逻辑中?如果提交按钮单击逻辑,则这将再次发生在第 4 个选项卡上。但我需要它出现在第二个选项卡本身中。请不要介意我的问题是否看起来很傻或太基础,我是新手,我还在学习:-)
0赞
Jake Steffen
6/5/2019
我写这篇文章时以为它将在服务器端运行。如果你想在客户端进行验证,你可以尝试如下操作:stackoverflow.com/questions/4537900/...
0赞
user2083386
6/5/2019
再次感谢您的快速回复。你认为是正确的。我希望在我的方案中根据服务器日期验证输入日期。我们已经有了以下检查日期范围的逻辑。[MandatoryField, Display(Name = "Enroller Year"), DataType(DataType.Date), UIHint("Date"), DateRange(MaxDateString = "now", MinOffsetString = "-20Y")] public virtual DateTime? EnrolledYear { get; set; }
0赞
Jake Steffen
6/5/2019
最好控制用户可以输入的内容
0赞
user2083386
6/6/2019
当用户将其系统日期/时间更改为上一年时,会发生此问题。由于应用程序占用了当前浏览器的时间,因此用户可以从 UI 通过。因此,为了限制这一点,我们想使用服务器日期进行验证。但是我们想要显示的消息就在第二个选项卡本身中,而不必等到最后一个选项卡,他单击提交按钮。
评论