4

個々のプロパティに対してクライアント側の検証が機能していますが、クライアント側の検証を使用してモデル レベル (2 つ以上のプロパティ) で検証したいと考えています。

@Html.ValidationSummary(true)作成したモデル属性の検証エラーを表示するために使用しています。

ただし、モデル エラーが発生した場合、メッセージは表示されません。アクションは実行できませんが、エラーは表示されません。

なぜこれが当てはまるのか誰にも分かりますか?

この場合、Ajaxフォームを使用する必要があるため、サーバー側は機能しないため、クライアント側の検証と関係があると思います。

アドバイスをいただければ幸いです。

モデル属性

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
            }
        };
    }
}

モデル クラス

    [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 */
     }

意見

@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 */
    }
4

1 に答える 1

0

チェックボックスがチークされていることを確認するために、チェックボックスのカスタムバリデーターを作成し、次のことを行う必要がありました。

<script type="text/javascript">
    $(function() {
        $.validator.unobtrusive.adapters.addBool('requiredcheckbox', 'required');
    }(jQuery));
</script>

@Html.ValidationMessageFor(x=>x.yourProp) も含めます

于 2012-09-01T02:59:00.507 に答える