ASP.NET MVC控制器中的自定义模型:Date DataType的自定义显示消息

时间:2010-05-04 02:03:19

标签: asp.net-mvc entity-framework asp.net-mvc-2

我有一个ASP.NET MVC页面,我必须在自定义文本中显示字段。 为此,我使用以下字段构建了CustomModel RequestViewModel

描述,事件,用法日期

对应这些我的自定义模型具有以下代码。这样,DisplayName就会显示在ASP.NET MVC View页面上。

现在是Description和Event字符串数据类型,这两个字段都显示Custom DisplayMessage。 但我的日期数据类型有问题。而不是“幻灯片的使用日期”,它仍然显示来自actualModel的 UsageDate

有人遇到过DateDatatype这个问题吗?

感谢您的回复。

自定义型号:

[Required(ErrorMessage="Please provide a description")]
[DisplayName("Detail Description")]
[StringLength(250, ErrorMessage = "Description cannot exceed 250 chars")]
// also need min length 30
public string Description { get; set; }

[Required(ErrorMessage="Please specify the name or location")]
[DisplayName("Name/Location of the Event")]
[StringLength(250, ErrorMessage = "Name/Location cannot exceed 250 chars")]
public string Event { get; set; }

[Required(ErrorMessage="Please specify a date", ErrorMessageResourceType = typeof(DateTime))]
[DisplayName("Date of Use of Slides")]
[DataType(DataType.Date)]
public string UsageDate { get; set; }

ViewCode:

<p>
    <%= Html.LabelFor(model => model.Description) %>
    <%= Html.TextBoxFor(model => model.Description) %>
    <%= Html.ValidationMessageFor(model => model.Description) %>
</p>
<p>
    <%= Html.LabelFor(model => model.Event) %>
    <%= Html.TextBoxFor(model => model.Event) %>
    <%= Html.ValidationMessageFor(model => model.Event) %>
</p>
<p>
    <%= Html.LabelFor(model => model.UsageDate) %>
    <%= Html.TextBoxFor(model => model.UsageDate) %>
    <%= Html.ValidationMessageFor(model => model.UsageDate) %>
</p>

2 个答案:

答案 0 :(得分:1)

您对ErrorMessageResourceType = typeof(DateTime)的意图是什么?如果不使用ErrorMessageResourceName,我不相信你会设置它。你试过删除吗?

答案 1 :(得分:1)

[Required(ErrorMessage="Please specify a date", ErrorMessageResourceType = typeof(DateTime))]的属性定义不正确。我怀疑这是导致问题的原因。

ErrorMessageResourceType propertyErrorMessageResourceName property一起使用。您可以查看this link以获取有关如何正确使用它们的更多信息(与您的问题无直接关系)。

将代码更改为此,您应该全部设置:

[Required(ErrorMessage="Please specify a date")]
[DisplayName("Date of Use of Slides")]
[DataType(DataType.Date)]
public string UsageDate { get; set; }

不完全确定,但您可能还想放弃[DataType(DataType.Date)]看到,因为在填充模型时我已经将日期值重新格式化为字符串(我假设?)。


只是一个建议,但你可能想要考虑而不是将DateTime转换为字符串,而是使用DisplayFormatAttribute然后修改UsageDate属性看起来像这样:

[Required(ErrorMessage="Please specify a date")]
[DisplayName("Date of Use of Slides")]
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime UsageDate { get; set; }

DisplayFormatAttribute.DataFormatString的值对应于DateTime的所需输出格式。有关格式模式的完整列表,请参阅this page

使用上面的属性定义,您可以在视图中调用<%=Html.DisplayFor(m => m.UsageDate)%>,它将以您使用该属性指定的格式吐出日期。在将DateTime发送到视图之前将DateTime转换为字符串要更清晰,更具可扩展性,但当然这完全取决于您。 :)

快乐旅行!