0

我有带有 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>

这是一个简单的文本框。我想覆盖默认脚手架。我可以向默认模板添加一些内容,然后生成我的更改。

如何配置ie Create.cs.t4 文件来生成bootstrap datetimepicker?

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

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

或布尔类型

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

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

4

1 回答 1

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类型创建编辑器模板,并且所有 editorfor 标签将被转换为您的自定义 html 标签,其中包括 Booststap 日期和时间选择器或其他任何东西,如 jquery ui 日历。

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

于 2016-02-16T07:42:11.517 回答