如何验证用户在 ASP.NET MVC 中指定了正确的日期?

发布于 2024-10-23 21:18:18 字数 182 浏览 6 评论 0 原文

有没有简单的方法来客户端(和服务器)端验证 Date ?

我的想法是有 3 个输入字段,分别表示日、月和年。我使用带注释的模型和 AJAX 验证脚本来客户端验证数据。我怎样才能用日期做到这一点?

我可以设置类似日期的值必须来自 Range<1, 31>但是,如果月份是 2 月,则值 31 无效......

Is there any simple way to client (and server) side validate Date ?

My idea is to have 3 input fields for day, month and year. I'm using anotated model and AJAX validation scripts to client side validate the data. How can I do that with date ?

I can set something like day must be from Range<1, 31> but still, if the month is february then value 31 is invalid...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

等待我真够勒 2024-10-30 21:18:18

我同意@bAN - 最用户友好的方法是使用日期选择器。禁用 JavaScript 的用户必须将日期手动写入文本框中。您还可以检测禁用的 JavaScript,并在这种情况下回退到没有日期选择器的版本。

如果您确实想要 3 个输入字段,那么您有几个选择。您的模型 int day 需要 3 个属性;整月; int 年;。当您从客户端收到数据时,您必须通过尝试创建 DateTime 对象来手动进行验证。如果您指定了不正确的格式,它将抛出异常:

try
{
    var date = new DateTime(model.Year, model.Month, model.Day);
    ...
}
catch(ArgumentOutOfRangeException exception)
{
    ModelState.AddModelError(...);
}

为了获得更愉快的用户体验,您可以使用 3 个下拉菜单。您可以根据选择的月份更改天数和/或在客户端运行验证。

I agree with @bAN - the most user friendly way is to use a datepicker. Users with javascript disabled will have to write the dates manually into the textbox. You can also detect disabled javascript and do a fallback to a version without the datepicker in that case.

If you really want 3 input fields, you have a few options though. You need 3 properties on your model int day; int month; int year;. When you receive the data from the client, you will have to do the validation manually by trying to create a DateTime object. It will throw an exception if you specify an incorrect format:

try
{
    var date = new DateTime(model.Year, model.Month, model.Day);
    ...
}
catch(ArgumentOutOfRangeException exception)
{
    ModelState.AddModelError(...);
}

As a more pleasant user experience you can have 3 dropdowns instead. You can change the number of days depending on which month is selected and/or run validation at the client side.

撩人痒 2024-10-30 21:18:18

自定义模型绑定器似乎是一个很好的解决方案。

A custom model binder seems like a good solution for this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文