Я думаю, вам будет трудно получить маску формата / ввода для TimeSpan. Я думаю, что лучше всего использовать строку в качестве типа ввода и применить к ней регулярное выражение.
[Required (ErrorMessage ="please add a time")]
[Display(Name = "Clocked Time")]
[RegularExpression(@"^(60|([0-5][0-9])):(60|([0-5][0-9]))(\.[0-9]*)$", ErrorMessage = "Must be in format hh:mm.fff")]
public String ClockedtimeString { get; set; }
private TimeSpan Clockedtime => TimeSpan.Parse(ClockedtimeString);
Это должно обеспечить проверку на стороне клиента, если пользователь вводит неверное значение.
Вы, вероятно, можете настроить регулярное выражение, чтобы оно лучше соответствовало вашим потребностям (это не моя область знаний).
На странице вашего контроллера / бритвы вы можете ссылаться на свойство Clockedtime
, которое должно содержать проанализированное значение.