Ответ 1
Вы можете использовать атрибут [DisplayFormat]
:
[Required]
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh\:mm}")]
public TimeSpan Start { get; set; }
Я создаю представление, содержащее форму в 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>
Любые советы будут высоко оценены.
Вы можете использовать атрибут [DisplayFormat]
:
[Required]
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh\:mm}")]
public TimeSpan Start { get; set; }
Ответ Дарина работает, но проверка еще не работает, как я ожидал. Я добавил пользовательскую проверку. Эта пользовательская проверка делает регулярное выражение без атрибута регулярного выражения. Это делается иначе, если вы не можете отправлять такие сообщения, как 14:30, потому что регулярное выражение остановит его, или объект TimeSpan остановит его, потому что он ожидает TimeSpan как 00:00:00.
Итак, я создал эту проверку для MVC 5 с Entity Framework 6 в обновлении версии Visual Studio 2013 4.
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;
}
}