ModelState を使用してフォームを検証しようとしていますが、ModelState は常に有効と表示されます。例: 2 人のフォームモデルをそれぞれ同じ SSN で保存しようとすると、ModelState が有効な値を返します。IValidatableObject を使用してフォームモデルを検証しています。私が間違っているかもしれないアイデアはありますか?MVC 3 で .Net 4.0 を使用しています。
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; }
}