我正在尝试使用 ModelState 验证表单,但我的 ModelState 始终显示为有效。例如:当我尝试使用相同的 SSN 保存 2 人 formModel 时,ModelState 返回有效。我正在使用 IValidatableObject 来验证我的表单模型。有什么想法我可能会出错吗?我正在使用 .Net 4.0 和 MVC 3。
public JsonResult LoadOccupantsDetailedInformation()
{
//Load the personsFormModel with data
return new JsonpResult(personsFormModel, JsonRequestBehavior.AllowGet);
}
[HttpPost]
public ActionResult SaveOccupantsDetailedInformation(
PersonsFormModel personsFormModel)
{
//This line is always returning true even if I pass 2 persons with the same ssn
if (ModelState.IsValid == false)
{
var errorList = ModelState.ToDictionary(
kvp => kvp.Key,
kvp => kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray()
);
return Json(new { Errors = errorList });
}
//Save the data in personsFormModel to database
return Json(new JsonResultViewModel { Success = true });
}
public partial class PersonsFormModel : List<PersonFormModel>, IValidatableObject
{
public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(
ValidationContext validationContext)
{
var validationResults
= new List<System.ComponentModel.DataAnnotations.ValidationResult>();
if (this.SSNs.Count() > this.SSNs.Distinct().Count())
{
validationResults.Add(new System.ComponentModel.DataAnnotations.ValidationResult(
"All the persons in the household should have a unique SSN\\ITIN number",
new[] { "SSN" }));
}
return validationResults;
}
private IEnumerable<string> SSNs
{
get
{
return this.Select(element => element.SSN);
}
}
}
public class PrequalifyOccupantListPersonDetailedFormModel
{
[Required(ErrorMessage = "SSN is required")]
public string SSN { get; set; }
}