有没有办法知道哪个验证属性导致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 :(得分: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 :(得分: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