我正在为包含时间跨度的模型在ASP.NET MVC3中创建一个包含表单的视图。我想知道是否有一种方法可以阻止渲染的文本框显示秒部分?那么我会得12:30:00
而不是12:30
而不是//model
[Required]
[DataType(DataType.Time)]
public TimeSpan Start { get; set; }
//view
<div class="editor-field">
@Html.EditorFor(model => model.Start)
@Html.ValidationMessageFor(model => model.Start)
</div>
?
以下是我在模型和视图中的内容:
{{1}}
非常感谢任何建议。
答案 0 :(得分:26)
您可以使用[DisplayFormat]
属性:
[Required]
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh\:mm}")]
public TimeSpan Start { get; set; }
答案 1 :(得分:0)
Darin的答案有效,但验证仍然没有像我预期的那样有效。我添加了自定义验证。该自定义验证正在执行没有正则表达式属性的正则表达式。这样做,否则你不能发布像14:30这样的时间,因为正则表达式将停止它,或者TimeSpan对象将停止它,因为它期望TimeSpan像00:00:00。
因此,我在Visual Studio 2013 Update 4中使用Entity Framework 6为MVC 5创建了此验证。
public class Training : IValidatableObject
{
private const string Time = @"^(?:[01][0-9]|2[0-3]):[0-5][0-9]:00$";
public int Id { get; set; }
[Display(Name = "Starttime")]
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh\:mm}")]
public TimeSpan StartTime { get; set; }
[Display(Name = "Endtime")]
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh\:mm}")]
public TimeSpan EndTime { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
Regex timeRegex = new Regex(Time);
if (!timeRegex.IsMatch(StartTime.ToString()))
{
results.Add(new ValidationResult("Starttime is not a valid time hh:mm", new[] { "StartTime" }));
}
if (!timeRegex.IsMatch(EndTime.ToString()))
{
results.Add(new ValidationResult("Endtime is not a valid time hh:mm", new[] { "EndTime" }));
}
return results;
}
}