使用ViewModel和html类属性设置的日期格式输入

Taj*_*oma 5 date-formatting editorfor razor asp.net-mvc-3

我正在使用asp.net mvc3中的razor视图引擎.

现在,我需要一个输入,DateTime它应该以固定的格式显示值(比方说dd-MMM-yyyy).所以我可以这样做:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MMM-yyyy}")]
public DateTime StartDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

在视图中:

@Html.EditorFor(model => model.StartDate)
Run Code Online (Sandbox Code Playgroud)

但我需要在输入中添加一个类.我认为这是不可能的EditorFor.所以我可以使用

@Html.TextBoxFor(model => model.StartDate, new { @class = "Date" })
Run Code Online (Sandbox Code Playgroud)

但是在这种情况下显示格式不起作用.

Model可以为null.所以,

@Html.TextBox("StartDate", string.Format("{0:dd-MMM-yyyy}", Model.StartDate))
Run Code Online (Sandbox Code Playgroud)

会扔NullReferenceException.

jzm*_*jzm 9

奥菲莉亚的方式是我的更快版本.但是,如果您的应用程序中有一些日期字段,这种方式很有用.所以这就是我喜欢的方式:

- >在解决方案资源管理器中, Shared中创建一个名为" EditorTemplates " 的文件夹

- >在那里,添加一个新的(强类型)局部视图.称之为" DateTime".

- >打开此视图,并删除其中的任何代码,并在其中抛出以下代码:

@model System.DateTime
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "date" /* + any other html attributes you want */ })
Run Code Online (Sandbox Code Playgroud)

- >在ViewModel中,您的日期字段应如下所示:

[Display(Name = "My Date:"), DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime MyDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

- >在主视图和任何想要使用日期字段的视图中,您可以EditorFor在属性上使用,如下所示:

@Html.EditorFor(m => m.MyDate)
Run Code Online (Sandbox Code Playgroud)

您可以在控制器中初始化日期字段,或在viewmodel的构造函数中设置默认日期.