我正在使用EF Core构建ASP.Net Core 2.1 MVC Web应用程序。我有一个具有TimeSpan
属性的模型。我希望输入的时间(mm:ss)在01:00
和59:59
之间,所以我不想显示TimeSpan的小时部分,因为无论如何它都是零。为此,我在属性中添加了DisplayFormat
属性。因为我想进行客户端验证,所以我也添加了RegularExpression
属性:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:mm\:ss}")]
[RegularExpression(@"((0?0:)?([0-3]?[0-9])(:[0-5][0-9])?)", ErrorMessage = "Die Dauer muss zwischen 01:00 und 30:00 liegen")]
public TimeSpan SlotDuration { get; set; }
(我确实知道我的正则表达式不会验证至少一分钟的事情,但这不是我的意思。)
现在,我确实遵守以下规定:
20:00
。如果我提交请求,则模型验证失败,并显示正则表达式属性的ErrorMessage。0:20:00
是可行的,ModelState.IsValid == true
并且SlotDuration绑定值正确。0:20:00
的验证和绑定可以正常工作;使用20:00
会导致20小时的时间跨度。以下代码输出
20:00 --> 00:20:00
match
string value = null;
TimeSpan interval;
var rg = new System.Text.RegularExpressions.Regex(@"((0?0:)?([0-3]?[0-9])(:[0-5][0-9])?)");
value = "10:25";
if (TimeSpan.TryParseExact(value, @"mm\:ss", null, out interval))
Console.WriteLine("{0} --> {1}", value, interval.ToString("c"));
else
Console.WriteLine("Unable to parse '{0}'", value);
if (rg.IsMatch(value))
Console.WriteLine("match");
else
Console.WriteLine("no match");
问题:
DisplayFormat
将输入的值转换为TimeSpan?是否有另一个实现此目的的属性/属性/...?