Модель c # интерпретирует mm: ss как hh: mm [duplicate]

Вот моя функция, чтобы иметь довольно var_dump.

Я немного улучшил отображение Xdebug (дайте некоторое пространство вокруг, разделитель между значениями) , переносить длинные переменные и т. д.).

Когда вы вызываете эту функцию, вы можете установить заголовок, фон, цвет текста, чтобы различать все ваши var_dump на странице.

Или не;)

/**
 * Pretty var_dump 
 * Possibility to set a title, a background-color and a text color
 */ 
function dump($data, $title="", $background="#EEEEEE", $color="#000000"){

    //=== Style  
    echo "  
    <style>
        /* Styling pre tag */
        pre {
            padding:10px 20px;
            white-space: pre-wrap;
            white-space: -moz-pre-wrap;
            white-space: -pre-wrap;
            white-space: -o-pre-wrap;
            word-wrap: break-word;
        }

        /* ===========================
        == To use with XDEBUG 
        =========================== */
        /* Source file */
        pre small:nth-child(1) {
            font-weight: bold;
            font-size: 14px;
            color: #CC0000;
        }
        pre small:nth-child(1)::after {
            content: '';
            position: relative;
            width: 100%;
            height: 20px;
            left: 0;
            display: block;
            clear: both;
        }

        /* Separator */
        pre i::after{
            content: '';
            position: relative;
            width: 100%;
            height: 15px;
            left: 0;
            display: block;
            clear: both;
            border-bottom: 1px solid grey;
        }  
    </style>
    ";

    //=== Content            
    echo "<pre style='background:$background; color:$color; padding:10px 20px; border:2px inset $color'>";
    echo    "<h2>$title</h2>";
            var_dump($data); 
    echo "</pre>";

}
1
задан GibboK 6 November 2012 в 17:15
поделиться

2 ответа

Атрибут DisplayFormat - это буквально только для отображения значения. Если вы установите ApplyFormatInEditMode все, что он сделает, также примените формат к содержимому ваших данных, если он отображается в текстовом поле (предназначенное для редактирования). Это не имеет никакого отношения к проверке.

Если вы хотите проверить ввод с использованием указанного вами формата, вам, вероятно, придется создать свой собственный ValidationAttribute и использовать DateTime.ParseExact(), чтобы попытаться убедитесь, что он соответствует формату, который вы ожидаете. Единственный откат - у него не будет поддерживающей логики проверки на стороне клиента, если вы его не напишете.

Я не тестировал это, но он должен дать вам начало.

public class DateTimeFormatAttribute : ValidationAttribute
{
   public int Format { get; set; }

   public override bool IsValid(object value)
   {
        if (value == null)
            return true;

        DateTime val;
        try
        {
            val = DateTime.ParseExact(value.ToString(), Format, null);
        }
        catch(FormatException)
        {
            return false;
        }

        //Not entirely sure it'd ever reach this, but I need a return statement in all codepaths
        return val != DateTime.MinValue;
   }
}

Тогда это просто вопрос использования. [DateTimeFormat(Format = "dd MMM yyyy")]

UPDATE: Извините, я не думаю, что я четко прочитал ваш вопрос. Причина, по которой он жалуется на данные по обратной передаче, состоит в том, что формат, который вы пытаетесь использовать, не является стандартным. Возможно, вам лучше реализовать один из общих сборщиков дат в Интернете, который будет использоваться при заполнении поля, а не в том, чтобы отредактировать его вручную или ожидать нестандартного формата. Пользовательские форматы отображения отлично подходят для отображения, но если вы хотите использовать настраиваемый формат для режима редактирования, который по умолчанию DateTime.Parse не понимает, вам придется писать свой собственный ModelBinder, я верю, и это то, чего я не сделал , в качестве альтернативы вы можете изменить тип данных в своей модели viewmodel на строку и проанализировать ее самостоятельно в методе действий (вы все равно можете использовать предоставленный в этом случае валидатор). Чтобы избавиться от вашей ошибки (но вы также удалите свой собственный формат в режиме редактирования), вам придется удалить свойство ApplyFormatInEditMode.

5
ответ дан Nick Albrecht 26 August 2018 в 06:52
поделиться

0:dd MMM yyyy будет ожидать строку, подобную 06 JUN 2009 вместо 6/15/2009.

Как вы вводите строку при получении ошибки String Not in Correct Format?

0
ответ дан Eonasdan 26 August 2018 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: