TimeSpan и "24:00" ошибка синтаксического анализа в Asp.net MVC - PullRequest
4 голосов
/ 20 июня 2011

У меня есть модальное диалоговое окно в моем веб-приложении, где пользователи могут вводить интервал времени между 00:00 и 24:00. Ползунок диапазона используется для выбора этого диапазона.

Все работает, как и ожидалось, за исключением того, что всякий раз, когда пользователь устанавливает правильный маркер диапазона на значение 24:00, механизм связывания модели по умолчанию не может анализировать это TimeSpan.

public class Timing
{
    public TimeSpan Starts { get; set; }
    public TimeSpan Ends { get; set; }
}

Мой объект, который отправляется обратно на сервер, имеет свойство IList<Timing>.

Итак. Проблема только в том, что строковое значение «24:00» не может быть проанализировано для TimeSpan экземпляра. Можно ли убедить механизм связывания модели по умолчанию распознать такое строковое значение?

Я бы не хотел менять 24:00 на клиенте на 00:00. Я знаю, что у меня есть свойства Starts и Ends, но моя проверка модели подтверждает, что Ends всегда больше, чем Starts. Ручное переключение на 23:59 также громоздко. В принципе, возможно ли пройти 24:00 и все еще быть проанализированным на сервере .

Ответы [ 3 ]

7 голосов
/ 20 июня 2011

Я думаю, что диапазон слишком большой. 24:00 на самом деле 00:00 на следующий день. поэтому они должны перейти от 00:00.00 до 23:59.99 или чего-либо еще.

ЗАКЛЮЧИТЕЛЬНЫЙ ОТВЕТ (?) Измените 24:00 на клиенте на 1.0:00. Это будет работать, потому что TimeSpan.Parse("1.0:00").TotalHours возвращает 24

РЕДАКТИРОВАТЬ: См. Документацию здесь: http://msdn.microsoft.com/en-us/library/se73z7b9.aspx. Показывает максимальный диапазон для дней, часов, минут и т. Д. Для часов это от 0 до 23 согласно моему комментарию ниже.

РЕДАКТИРОВАТЬ: Если вы просто позволяете им выбрать целое число для часов, а затем проанализировать его на сервере.

например. TimeSpan ts = TimeSpan.FromHours(24) возвращает 1.00:00:00 И, конечно, вы всегда можете сказать ts.TotalHours, и он возвращает 24.

2 голосов
/ 20 июня 2011

сделать предварительную обработку

strText.Replace("24:", "00:")
1 голос
/ 20 июня 2011

Ограничить значение конца до 23: 59

24: 00 == 00:00 следующего дня

...