我有点难过,因为我想格式化值并为css类添加一个html属性。
如果我使用@Html.TextBoxFor(m => m.DateModified)
- 我可以添加html属性,但格式不能通过成员上的DisplayFormat属性工作。
如果我使用@Html.EditorFor(m => m.DateModified)
- 格式化工作,但我无法添加html属性
如果我使用@Html.TextBox("DateModified", Model.DateModified, ...)
- 当表单处于添加模式时,Model为null时,我得到空引用异常
实现这一目标的最佳方法是什么?
答案 0 :(得分:17)
我最终通过为日期选择器创建自定义编辑器模板来解决此问题:
共享/ 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)
答案 1 :(得分:10)
你可以......
@Html.TextBoxFor(m => m.DateModified, new { Value = Model.DateModified.ToString("MM-dd-yyyy"), @class = "superCoolClassName"})
答案 2 :(得分:3)
使用@ 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"]
})
答案 3 :(得分:1)
为了防止对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))
答案 4 :(得分:0)
在文本框中显示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);