以下是真实的:
我的好友课程中有以下验证逻辑:
[Required(ErrorMessageResourceType = typeof(Project.Web.ValidationMessages), ErrorMessageResourceName = "Required")]
[RegularExpression(@"\b(0?[1-9]|1[012])[/](0?[1-9]|[12][0-9]|3[01])[/](19|20)?[0-9]{2}\b", ErrorMessageResourceType = typeof(Project.Web.ValidationMessages), ErrorMessageResourceName = "Invalid")]
public virtual DateTime? BirthDate
{
get;
set;
}
这有两个问题:
这不会通过服务器端验证(如果我启用客户端验证,它可以正常工作)。我假设这是因为正则表达式没有考虑小时,分钟,秒,因为在验证发生时,文本框中的值已经被转换为服务器上的DateTime。
如果数据已存在于数据库中并被读入模型并显示在页面上,则BirthDate字段会在我的文本框中显示小时,分钟,秒(我不想要)。我总是可以使用ToShortDateString(),但我想知道是否有一些我可能会缺少的更清洁的方法。
由于
答案 0 :(得分:1)
1:通过将DateTime更改为不可为空可以轻松解决此问题,这意味着输入的日期时间值必须是可解析的,因此有效,然后使用:
[DataType(DataType.Date)]
属性而不是正则表达式。这将确保该字段是必需的,并且必须是可解析的。
2:这是一个模板问题。简单的方法是在/ Views / Shared / EditorTemplates中创建一个自定义的Date.ascx模板,该模板调用ToShortDateString()并挂钩你的jquery datepicker。
这就是我的样子:
<%@ Import Namespace="System.Web.Mvc.Html" %>
<%
string displayText = string.Empty;
if (Model != null)
{
if (DateTime.Parse(Model.ToString()) != DateTime.MinValue)
displayText = DateTime.Parse(Model.ToString()).ToShortDateString();
}
%>
<%= Html.TextBox("", displayText, new { @class = "date-box" })%>