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

时间:2011-11-11 03:25:31

标签: asp.net-mvc-3 razor editorfor date-formatting

我正在使用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

2 个答案:

答案 0 :(得分:9)

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

- >在解决方案资源管理器中,在 共享中创建一个名为“ 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" })

希望这是你的意思/需要:)