1

我一直有問題讓格式化在我的MVC 5視圖中工作。視圖是作爲TextAreaFor的腳手架。我在我的ViewModel中爲我的屬性添加了DataFormatting,但它實際上並不適合我。從我研究過的所有內容中,我正確地格式化了ViewModel,但是我一直無法弄清楚格式化爲什麼沒有實際工作。與MVC 5中的差異相混淆TextBoxFor,EditFor和TextAreaFor?

所以,我試着使用@ 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; } 

這是腳手架創建的原始TextArea。沒有格式,但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> 

回答

3

添加HTML屬性使用@Html.EditorFor()您必須使用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屬性。

+0

謝謝! MVC 5.1+的變化一直是我的問題。我在5.2.3上,並沒有意識到CSS如何傳遞到EditFor中。 – Caverman

+0

你標記了'asp.net-mvc-4',所以不能確定:) –

+0

他們沒有asp.net-mvc-5,所以我覺得4儘可能的接近我所能得到的。我仍然遇到格式問題,但這次使用的是電話號碼。我有一篇文章,我開始了一段時間,但我仍然無法實現它的工作。有沒有辦法我可以給你發一個鏈接或標籤,讓你可以查看它,看看你能否確定我可能做錯了什麼? – Caverman