获取将ModelState的IsValid设置为false的验证属性
问题描述:
是否有任何方法可以知道导致ModelState.IsValid == false
的验证属性。获取将ModelState的IsValid设置为false的验证属性
A类
public class A
{
[Required(ErrorMessage = "Required")]
[DataFormat(DataType.Date, "Must be a Date (DD/MM/YEAR)")]
[NoFutureDate(ErrorMessage = "Future date is not allowed")]
public DateTime? Date { get; set; }
}
现在,当我发布其具有上述类的强类型与它的形式来看,则验证属性也会相应工作。
如果3个验证属性中的1个返回错误,例如[NoFutureDate(ErrorMessage = "Future date is not allowed")]
,该怎么办?
OR
如果3个验证属性2返回一个错误,说[NoFutureDate(ErrorMessage = "Future date is not allowed")]
和[DataFormat(DataType.Date, "Must be a Date (DD/MM/YEAR)")]
。
当然,我的财产未通过验证。
问题
有没有办法知道哪些验证特性造成的错误? 是[DataFormat]
其中之一还是两者[DataFormat]
和[NoFutureDate]
。
答
您可以使用ModelState.IsValidField("YourField")
和ModelState["Date"].Errors.Contains()
来检测哪个启动错误。
public ActionResult Test(YourModel model)
{
if(!ModelState.IsValidField("Date"))
{
var futureDateError = new ModelError("Future date is not allowed");
var dataFormatError = new ModelError("Must be a Date (DD/MM/YEAR)");
bool IsFutureDateError = ModelState["Date"].Errors.Contains(futureDateError);
bool isFormatError = ModelState["Date"].Errors.Contains(dataFormatError);
}
...... // your code here
}
答
嗨在以下方式中,您可以以编程方式获得modelstate字段错误。
方式1:
if (!ModelState.IsValid)
{
var modelErrors = new List<string>();
foreach (var modelState in ModelState.Values)
{
foreach (var modelError in modelState.Errors)
{
modelErrors.Add(modelError.ErrorMessage);
}
}
}
方式2:
string Errors = string.Join("; ", ModelState.Values
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage));
由于
KARTHIK
'[DATAFORMAT]'不是验证属性(您的'ErrorMessage'参数是没有意义) –
@StephenMuecke在提到的3中,2是自定义验证属性。 – barnes
你想要以编程方式知道,还是只想检查调试器? – ediblecode