![](/img/trans.png)
[英]Client-side validation difference between Html.TextBoxFor/Html.TextAreaFor and Html.EditorFor (with [DataType(DataType.MultilineText)])
[英]Html.TextBoxFor formatting or Html.EditorFor htmlAttributes?
我有點難過,因為我想格式化值並為css類添加一個html屬性。
如果我使用@Html.TextBoxFor(m => m.DateModified)
- 我可以添加html屬性,但格式不能通過成員上的DisplayFormat屬性工作。
如果我使用@Html.EditorFor(m => m.DateModified)
- 格式化工作,但我無法添加html屬性
如果我使用@Html.TextBox("DateModified", Model.DateModified, ...)
- 當表單處於添加模式時,當Model為null時,我得到空引用異常
實現這一目標的最佳方法是什么?
我最終通過為我的日期選擇器創建自定義編輯器模板來解決這個問題:
共享/ EditorTemplates / DateTime.cshtml
@model System.DateTime?
@Html.TextBox("", Model.HasValue ? Model.Value.ToString("dd/MM/yyyy") : string.Empty, new { @class = "date-picker" })
然后在我的原始頁面繼續使用
@Html.EditorFor(m => m.DateModified)
你可以...
@Html.TextBoxFor(m => m.DateModified, new { Value = Model.DateModified.ToString("MM-dd-yyyy"), @class = "superCoolClassName"})
使用@ Html.EditorFor(m => m.DateModified),否則DisplayFormat屬性將無效。
要添加CSS類等其他屬性,必須為DateTime創建編輯器模板。 使用以下內容創建文件EditorTemplates / DateTime.cshtml:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new
{
@class="date"
})
請注意,TextBox的值不是直接使用Model設置的,而是使用TemplateInfo.FormattedModelValue設置的 ,因為該值將根據DisplayFormat屬性進行格式化,而Model不會。 (這花了我很長時間才意識到。:))
在簡單的情況下,這可能就足夠了,例如,如果所有日期編輯器的CSS類都相同。
如果要對屬性進行參數化,也可以將屬性值參數傳遞給EditorFor。
@Html.EditorFor(m => m.DateModified, new { @class = "someClass" })
但是,此參數不會作為屬性自動委派給HTML控件,但您必須明確地在模板中“處理”它。 根據我的經驗,您可以在模板中的ViewData中訪問此參數值,因此參數化模板如下所示:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new
{
@class=ViewData["class"]
})
要防止對EditorFor中列出的鍵/值對進行硬編碼,請將ViewData對象轉換為Dictionary並將該字典對象傳遞給TextBox。
例如
@Html.EditorFor(m => m.DateModified, "Template", new { @class = "someClass", size=8 , htmlTag="custom" })
在你的模板中
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, ViewData.ToDictionary(c=>c.Key,c=>.Value))
要在文本框中顯示json日期(cshtml):
var d1 = ui.item.IssueDate;
var d = new Date(parseInt(d1.slice(6, -2)));
var Issdate = ("0" + (d.getMonth() + 1)).slice(-2) + '/' +
("0" + d.getDate()).slice(-2) + '/' +
d.getFullYear().toString();
$('#IssueDate').val(Issdate);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.