Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
在ASP.NET MVC中使用属性验证器验证DateTimeOffset和TimeSpan_Asp.net_Asp.net Mvc_Validation - Fatal编程技术网

在ASP.NET MVC中使用属性验证器验证DateTimeOffset和TimeSpan

在ASP.NET MVC中使用属性验证器验证DateTimeOffset和TimeSpan,asp.net,asp.net-mvc,validation,Asp.net,Asp.net Mvc,Validation,所以我用实体框架设置了实体,这些实体具有String、DateTimeOffset和TimeSpan类型的属性。为了对字符串执行验证,我使用了非常简单的属性,如“[Required]”或“[StringLength]”,并且使用的控件是文本框 我现在的问题是DateTimeOffset和TimeSpan,我不确定要使用什么控件,但更不确定要使用什么属性来验证输入 有什么建议吗?因为它是一个时间跨度,所以您可以得到分钟数,并对其执行IsNumeric调用,这是一个简单的自定义验证函数 如果您使用两

所以我用实体框架设置了实体,这些实体具有String、DateTimeOffset和TimeSpan类型的属性。为了对字符串执行验证,我使用了非常简单的属性,如“[Required]”或“[StringLength]”,并且使用的控件是文本框

我现在的问题是DateTimeOffset和TimeSpan,我不确定要使用什么控件,但更不确定要使用什么属性来验证输入


有什么建议吗?

因为它是一个时间跨度,所以您可以得到分钟数,并对其执行IsNumeric调用,这是一个简单的自定义验证函数

如果您使用两个日期计算时间差,您可以使用DateDiff函数计算差异并获得时间跨度-但是如果您已经有了时间跨度,请记住时间跨度可以表示为多个时间单位,因此使用自定义函数使用IsNumeric

否则,如果您不想编写自定义验证,则。最简单的方法是使用RangeValidator属性。为了安全起见,请输入最小和最大可能值,当使用此属性进行验证时,如果它不是数字,它将返回False,因此仅此一项就可以得到错误的字符串验证,并且您还可以验证timespan的可能值范围-如果范围不重要,然后只需将上限设置为安全值,如几百万分钟或其他什么(例如:Long.MaxValue或Integer.MaxValue)

您还可以将记号作为timespan的值传递,以便与范围进行比较,因此我相信timespan.Ticks()可以,但只需将文本框发送到RangeValidator就足够了,它将检查它是否为文本字符,并检查范围和瞧,验证已完成,无需自定义验证


请告诉我您的情况,以及如果需要,我可以如何帮助您。

我认为没有办法从输入推断数据类型。根据业务逻辑的需要处理它似乎是唯一的途径。

web浏览器中的输入通常以文本形式输入,MVC可以强制将其转换为类型,但如果我有“OOGABOOGA”,它肯定不能作为DateTimeOffset。@byte您有机会看看可能的解决方案吗?您的答案当然有道理,但我想我并不是真的想在获得数据类型后验证它们本身。这个问题背后的目的是,如果有选择,你会使用什么输入类型(例如文本框);对于输入,如何验证它确实是DateTimeOffset?您的答案假设您已经拥有数据,并且知道其类型正确。@字节如果您不知道将接收到什么,并且希望在验证过程中找出它,您可以发送两个隐藏字段作为日期,并且您肯定知道,或者发送一个文本框字段作为记号(timespan记号)由于这个数字总是非常长,你可以随时检查它是否是一个数字,是否超过某个百万。如果这不能回答你的问题,那么恐怕我还没有完全理解这个问题。如果这仍然是一个问题,请通过更新您的问题来详细说明。酷?