2017-06-29 71 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

相關問題