我正在使用asp.net mvc3中的razor视图引擎。
现在,我需要DateTime
的输入,它应以固定格式显示值(比如dd-MMM-yyyy
)。所以我可以这样做:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MMM-yyyy}")]
public DateTime StartDate { get; set; }
在视图中:
@Html.EditorFor(model => model.StartDate)
但我需要在输入中添加一个类。我认为EditorFor
无法做到这一点。
所以我可以使用
@Html.TextBoxFor(model => model.StartDate, new { @class = "Date" })
但是在这种情况下显示格式不起作用。
Model
可以为null。所以,
@Html.TextBox("StartDate", string.Format("{0:dd-MMM-yyyy}", Model.StartDate))
将抛出NullReferenceException
。
答案 0 :(得分:9)
- >在解决方案资源管理器中,在 共享中创建一个名为“ EditorTemplates ”的文件夹
- >在那里,添加一个新的(不强类型)部分视图。称之为“DateTime
”。
- >打开此视图,并删除其中的所有代码,并在其中抛出以下代码:
@model System.DateTime
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "date" /* + any other html attributes you want */ })
- >在 ViewModel 中,您的日期字段应如下所示:
[Display(Name = "My Date:"), DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime MyDate { get; set; }
- >在主视图以及您要使用日期字段的任何视图中,您只需在属性上使用EditorFor
,就像这样:
@Html.EditorFor(m => m.MyDate)
您可以在控制器中初始化日期字段,或在viewmodel的构造函数中设置默认日期。
答案 1 :(得分:2)
我使用它,它的工作正常:
@Html.TextBox("ExpiryDate", String.Format("{0:ddd, dd MMM yyyy}", DateTime.Now), new { id = "expirydate" })
希望这是你的意思/需要:)