2017-06-29 70 views
1

是否有任何方法可以知道导致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]

+0

'[DATAFORMAT]'不是验证属性(您的'ErrorMessage'参数是没有意义) –

+0

@StephenMuecke在提到的3中,2是自定义验证属性。 – barnes

+0

你想要以编程方式知道,还是只想检查调试器? – ediblecode

回答

1

您可以使用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 
} 
1

嗨在以下方式中,您可以以编程方式获得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

相关问题