Отображать дату как месяц/год, но проверять и сохранять как полную дату мм/дд/гггг

У меня есть дата, хранящаяся в базе данных в стандартном формате DateTime. Я получаю значение и отображаю его в поле формы как мм/гггг. Мой частичный вид отображается через это:

@Html.TextBoxFor(model => model.opinionDate, new { @Value = Model.opinionDate.ToString("MM/yyyy"), @readonly = "readonly" })

У меня есть bootstrap-datepicker, подключенный к полю даты. Он настроен только на выбор месяца и года.

Моя проверка модели jQuery не работает, поскольку она не похожа на дату. Как я могу проверить это значение? Могу ли я изменить значение (добавив 01 для дня) до того, как произойдет проверка?


person Connie DeCinko    schedule 05.03.2015    source источник


Ответы (2)


Поскольку ваше поле доступно только для чтения, а средство выбора даты уже дает вам нужное значение, возможно, вы можете либо вообще не проверять поле, либо вместо этого проверять его как строку. Затем, если вам нужен дополнительный уровень проверки, сделайте это в контроллере. Ознакомьтесь с документацией по проверке дат. Если вы проверяете строку, вы можете выполнить быструю проверку, чтобы убедиться, что у вас есть соответствующее количество символов:

$( "#myform" ).validate({  
    rules: {    
        opinionDate: {      
            required: true,
            rangelength: [4, 5]    
               }  
           }});

Это проверяет, имеет ли строка длину от 4 до 5 символов ("1/15" или "01/15"). Надеюсь это поможет!

person scurrie    schedule 05.03.2015
comment
Я получаю сообщение об ошибке, по-видимому, в моей модели, поскольку я пытаюсь прочитать значение DateTime, но использую его как строку. Невозможно привести объект типа «System.DateTime» к типу «System.String» - person Connie DeCinko; 06.03.2015
comment
Я полагаю, это имеет смысл. У вас есть несколько вариантов превратить эту строку в дату и время. В вашем контроллере вы можете объединить дневную часть даты в качестве заполнителя и преобразовать ее в строку, используя что-то вроде DateTime dt = Convert.ToDateTime(date) в соответствии с документацией здесь - person scurrie; 06.03.2015
comment
Вы также можете сделать это в своей модели: public string date_from_view { get; set;}, которая хранит строку, и public DateTime date { get { return Convert.ToDateTime("01/" + date_from_view); }}, которая преобразует строку в дату и время и сохраняет ее. - person scurrie; 06.03.2015

Я смог решить эту проблему, проанализировав значение, входящее и выходящее из базы данных через мой контроллер. Моя модель обрабатывает значение как строку. Все идет нормально. Мне не удалось заставить работать проверку выше, но я могу разобраться с этим позже. Поскольку это приложение для интранета, на данный момент достаточно использовать средство выбора даты, чтобы получить чистую дату.

person Connie DeCinko    schedule 06.03.2015