混淆了MVC 5 TextBoxFor,EditFor和TextAreaFor的差异?

时间:2016-06-01 03:51:00

标签: asp.net-mvc twitter-bootstrap asp.net-mvc-4 asp.net-mvc-5

我在格式化MVC 5 View时遇到了问题。 View是一个TextAreaFor的脚手架。我在我的ViewModel中为我的属性添加了DataFormatting,但它实际上并没有为我格式化。从我研究的所有内容中我正确地格式化了ViewModel,但我无法弄清楚为什么格式化实际上不起作用。

所以,我尝试使用@ Html.EditFor。这似乎使日期格式化工作,但它没有应用Bootstrap“表单控件”类。然后我尝试了@ Html.TextBoxFor,它像@Html.TextAreaFor一样响应,没有格式化,但确实应用了Bootstrap类。

我不知道使用哪一个以及我还需要做些什么来使我的View不仅格式化日期而且还应用Bootstrap CSS。

这是我的ViewModel属性。

[DisplayName("Call Date")]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime? CallDate { get; set; }

这是脚手架创建的原始TextAreaFor。没有格式化,但Bootstap CSS有效。

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

这是格式化日期的EditFor,但不适用Bootstrap CSS。

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

这是像TextAreaFor一样响应的TextBoxFor。

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

1 个答案:

答案 0 :(得分:3)

要使用@Html.EditorFor()添加html属性,您必须使用MVC-5.1 +,如果是,则使用

@Html.EditorFor(m => m.CallDate, new { htmlAttributes = new { @class="form-control datepicker" }})

如果您不使用MVC-5.1 +,并且想要生成文本框并格式化日期值,那么用法是(第二个参数是格式字符串)

@Html.TextBoxFor(m => m.CallDate, "{0:d}", new { @class = "form-control datepicker" })

请注意@Html.TextAreaFor()为多行文字生成<textarea>元素,不适合DateTime属性。