gpt4 book ai didi

asp.net-mvc - DataAnnotations DataType 属性中的 ErrorMessage 被忽略

转载 作者:行者123 更新时间:2023-12-04 21:00:01 25 4
gpt4 key购买 nike

我有一个使用 DataAnnotations 的模型。就像是

public class Appointment {
[Required(ErrorMessage="Please enter your name")]
public string Name { get; set; }

[Required(ErrorMessage="Please enter your appointment date?")]
[DataType(DataType.Date, ErrorMessage="Appointment date is not a date")]
public DateTime AppointmentDate { get; set; }
}

“必需”属性尊重 ErrorMessage 中的值;也就是说,如果我不输入值,我会收到“请输入”消息。但是,如果我在 DateTime 字段中输入字符串,则会收到标准系统错误消息“值 'blah' 对 AppointmentDate 无效”。

我通过 ASP.NET MVC 代码调试,似乎在 FormatException 的情况下,它没有从 propertyMetadata 中选择正确的显示名称。要么,要么我错过了一些明显的东西:/

有人遇到过这个问题吗?是我,还是只是测试版(我使用的是 ASP.NET MVC 2 Beta)?

最佳答案

在 MVC1 中,DataType 属性不符合您的预期,看起来它在 MVC2 中也没有。你最好的调用是有一个表示日期的字符串属性,检查它在那里的有效性。

这是一个项目的一小段摘录(使用 DataAnnotations 和 xVal):

private List<ErrorInfo> _errors;
private List<ErrorInfo> Errors
{
get
{
if (_errors == null)
_errors = new List<ErrorInfo>();
return _errors;
}
//set { _errors = value; }
}

private string _startDateTimeString;

/// <summary>
/// A string reprsentation of the StartDateTime, used for validation purposes in the views.
/// </summary>
/// <remarks>
/// If the user passes something like 45/45/80 it would be a valid mm/dd/yy format, but an invalid date,
/// which would cause an InvalidOperationException to be thrown by UpdateModel(). By assigning dates to string properties
/// we can check not only the format, but the actual validity of dates.
/// </remarks>
public string StartDateTimeString
{
get
{
return _startDateTimeString;
}
set
{
// Check whether the start date passed from the controller is a valid date.
DateTime startDateTime;
bool validStartDate = DateTime.TryParse(value, out startDateTime);
if (validStartDate)
{
StartDateTime = startDateTime;
}
else
{
Errors.Add(new ErrorInfo("StartDateTime", "Provide a valid date for the start time."));
}

_startDateTimeString = value;
}
}

partial void OnValidate(ChangeAction action)
{
if (action != ChangeAction.Delete)
{
Errors.AddRange(DataAnnotationsValidationRunner.GetErrors(this));

if (StartDateTimeString != null)
{
DateTime startDateTime;
if (!DateTime.TryParse(StartDateTimeString, out startDateTime))
{
Errors.Add(new ErrorInfo("StartDateTime", "Provide a valid date for the start time."));
}
}

if (Errors.Any())
throw new RulesException(Errors);
}
}
}

在我们项目的两个地方都进行检查是有意义的,但我只想向您展示一个概念。

关于asp.net-mvc - DataAnnotations DataType 属性中的 ErrorMessage 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com