【问题标题】:Confused with difference in MVC 5 TextBoxFor, EditFor, and TextAreaFor?对 MVC 5 TextBoxFor、EditFor 和 TextAreaFor 的区别感到困惑?
【发布时间】:2016-09-30 06:11:09
【问题描述】:

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

所以,我尝试使用@Html.EditFor。这似乎使日期格式化工作,但它没有应用引导程序“表单控制”类。然后我尝试了@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>

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

<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>

【问题讨论】:

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


    【解决方案1】:

    要使用@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() 为多行文本生成 &lt;textarea&gt; 元素,不适用于 DateTime 属性。

    【讨论】:

    • 谢谢! MVC 5.1+ 的变化一直是我的问题。我在 5.2.3 上,没有意识到 CSS 传递到 EditFor 的方式有所不同。
    • 你给它加了标签asp.net-mvc-4所以不能确定:)
    • 他们没有 asp.net-mvc-5 所以我认为 4 是尽可能接近的。我仍然遇到格式问题,但这次是在电话号码上。我有一个帖子,我不久前开始写它,但我仍然无法让它工作。有没有办法我可以给你发送一个链接或在其中标记你,这样你就可以查看它,看看你是否能确定我可能做错了什么?
    • 我刚刚为你添加了标签 :) 是this question。如果不在这里添加链接,我明天看看(这里很晚)
    猜你喜欢
    • 2013-02-06
    • 2014-08-30
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多