Bootstrap datetimepicker с лесами asp .net

У меня есть простой класс модели со свойством DateTime.

    [Required]
    [DataType(DataType.DateTime)]
    public DateTime When { get; set; }

В настоящее время Visual Studio Scaffolding генерирует это:

    <div class="form-group">
        @Html.LabelFor(model => model.When, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.When, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.When, "", new { @class = "text-danger" })
        </div>
    </div>

Это простое текстовое поле. Я хочу переопределить стандартные леса. Я могу добавить что-то в шаблоны по умолчанию, и мои изменения будут сгенерированы.

Как настроить то есть файл Create.cs.t4 для генерации начальной загрузки datetimepicker?

Существует условие if для проверки, когда это перечисление

else if (property.IsEnum && !property.IsEnumFlags) 

или тип bool

bool isCheckbox = property.TypeName.Equals(boolType);

Мое решение состоит в том, чтобы добавить оператор if, чтобы проверить, является ли он датой-временем, и создать собственное поле ввода. Я проверил сеть, но это не обычная тема.

1 ответ

Решение

Если вы хотите изменить строительные леса, вам нужно сделать это:

bool isDateTime = property.TypeName.Equals("System.DateTime");

Чтобы проверить тип данных свойства, необходимо проверить TypeName. TypeName принимает строковое значение типа данных, и вам необходимо включить пространство имен. например System.Int32, System.DateTime, System.Bool

Вы можете написать html-теги или создать свой собственный html-помощник, а затем сделать что-то вроде этого:

<# if (isDateTime) {#>
        @Html.CutomeDateHelperFor(modelItem => <#= "item." + GetValueExpression(property) #>)
 <# } #>

Помимо строительных лесов, еще одним более простым решением является использование шаблонов редактора. Вы создадите шаблон редактора для DateTime type и все тэги editorfor будут переведены в ваши пользовательские html-тэги, которые включают в себя Boosttap Date and time picker или что-то еще, например jquery ui calender.

Посмотрите этот пример: https://www.simple-talk.com/dotnet/asp.net/extending-editor-templates-for-asp.net-mvc/

Другие вопросы по тегам