我有一个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>
答案 0 :(得分:1)
您对ErrorMessageResourceType = typeof(DateTime)
的意图是什么?如果不使用ErrorMessageResourceName
,我不相信你会设置它。你试过删除吗?
答案 1 :(得分:1)
您[Required(ErrorMessage="Please specify a date", ErrorMessageResourceType = typeof(DateTime))]
的属性定义不正确。我怀疑这是导致问题的原因。
ErrorMessageResourceType property与ErrorMessageResourceName 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转换为字符串要更清晰,更具可扩展性,但当然这完全取决于您。 :)
快乐旅行!