Client-Side Validation for entire model using MVC 3 (unobtrusive ajax)
===

I've got client-side validation working for individual properties, however, I would like to validate at the model level (2 or more properties) using client-side validation.  I'm using @Html.ValidationSummary(true) to display the validation error for the Model attribute that I created.  However, when the model error is generated, it doesn't display a message.  It prevents the action from being made, but no error is displayed.  Anybody know why this would be the case?  My hunch is that it has something to do with client-side validation since server-side doesn't work in this case since I have to use an Ajax form.  Any advice would be appreciated!

**Model Attribute**

    public class AuditDetailValidatorAttribute : ValidationAttribute, IClientValidatable
    {
        public AuditDetailValidatorAttribute()
        {
            ErrorMessage = "Must select an NCN level...";
        }

        public override bool IsValid(object value)
        {
            AuditRequirementDetail audit = value as AuditRequirementDetail;

            if (audit == null || audit.AuditResult.Id == 0 || audit.AssessmentLevel.Id == 0)
            {
                return true;
            }
            else
            {
                return !(audit.AuditResult.Id == 4 && audit.AssessmentLevel.Id == 1);
            }
        }

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            return new List<ModelClientValidationRule> 
            {
                new ModelClientValidationRule 
                {
                    ValidationType = "required",
                    ErrorMessage = this.ErrorMessage
                }
            };
        }
    }
**Model Class**

        [AuditDetailValidator]
        public class AuditRequirementDetail
        {
            // Constructor
            public AuditRequirementDetail()
            {
                // instantiate the contained objects on AuditRequirementDetail creation
                AssessmentLevel = new AssessmentLevel();
                AuditResult = new AuditResult();
                Requirement = new RequirementDetail();
                Attachment = new Attachment();
    
                Counter = 0;
            }
            /* rest of the code */
         }
**View**

    @model pdiqc.Models.AuditRequirement.AuditRequirementDetail
    
    @{
        var SuccessTarget = "success" + Model.DetailID;
        var IsValidTarget = "IsValid" + Model.DetailID;
        var PerformCompletedTarget = "PerformCompleted" + Model.DetailID;
        var AuditResultTarget = "AuditResult_Id" + Model.DetailID;
        var AssessmentLevelTarget = "AssessmentLevel_Id" + Model.DetailID;
        var DesignatorTarget = "Designator_Id" + Model.DetailID;
        var EvidenceTarget = "Evidence_Id" + Model.DetailID;
        var AttachmentTarget = "Attachments_Id" + Model.DetailID;
    
        var AuditResultReferral = "#" + AuditResultTarget;
        var AssessmentLevelReferral = "#" + AssessmentLevelTarget;
        var DesignatorReferral = "#" + DesignatorTarget;
        var EvidenceReferral = "#" + EvidenceTarget;
        var AttachmentReferral = "#" + AttachmentTarget;
    }
    
        @using (Ajax.BeginForm("PerformRequirement", "Audit", new AjaxOptions { HttpMethod = "POST", OnSuccess = "success" }, new {Class="PerformReqForm" }))
        {
            @Html.ValidationSummary(true)
            if ((Model.AuditResult.Id == 1 && Model.AssessmentLevel.Id > 1) || Model.Evidence == string.Empty || Model.Evidence == null)
            {
                <input class="@IsValidTarget" name="IsValid" type="hidden" value=false />
            }
            else
            {
                <input class="@IsValidTarget" name="IsValid" type="hidden" value=true />
            }
        
           <p class="reqText">@Model.RequirementLabel.ConfigurableLabelDesc #@ViewBag.PerformCounter - @ModelMetadata.FromLambdaExpression(x => x.Requirement.Text, ViewData).SimpleDisplayText</p>
           <div class="hide">
           /* REST OF CODE */
        }