Bootstrap 带有 asp .net 脚手架的日期时间选择器

Bootstrap datetimepicker with asp .net scaffolding

我有简单的模型 class 和 DateTime 属性。

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

目前Visual Studio脚手架生成这个:

    <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 文件来生成 bootstrap datetimepicker?

有一个 if 条件来检查这是一个枚举

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

或bool类型

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

我的解决方案是添加 if 语句来检查它是否是日期时间并生成我自己的输入字段。我检查了网络,但这不是一个常见的话题。

如果你想改变脚手架,你需要这样做:

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

为了检查 属性 的数据类型,您需要检查 TypeName。 TypeName 采用数据类型的字符串值,您需要包含名称 space。例如System.Int32System.DateTimeSystem.Bool

您可以编写 html 标签或创建您自己的 html 助手,然后执行如下操作:

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

除了脚手架,另一个更简单的解决方案是使用编辑器模板。您将为 DateTime 类型创建编辑器模板,所有 editorfor 标签将被转换为您的自定义 html 标签,其中包括 Booststap 日期和时间选择器或任何其他类似 jquery ui 日历.

以这个为例: https://www.simple-talk.com/dotnet/asp.net/extending-editor-templates-for-asp.net-mvc/