Подтвердить что ты не робот

Удаление секунд из редактора TimeSpan.

Я создаю представление, содержащее форму в 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>

Любые советы будут высоко оценены.

4b9b3361

Ответ 1

Вы можете использовать атрибут [DisplayFormat]:

[Required]
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh\:mm}")]
public TimeSpan Start { get; set; }

Ответ 2

Ответ Дарина работает, но проверка еще не работает, как я ожидал. Я добавил пользовательскую проверку. Эта пользовательская проверка делает регулярное выражение без атрибута регулярного выражения. Это делается иначе, если вы не можете отправлять такие сообщения, как 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;
    }
}