条件验证不起作用

Conditional validations are not working

我正在使用数据注释进行客户端验证。我有两种使用 [Required][RequiredIfTrue] 的情况。问题是我的条件验证不起作用。

工作:

型号:

[DisplayName(@"Custom Email Confirmation Address")]
[EmailAddress(ErrorMessage = @"Invalid Email Address")]
public string CustomEmailConfirmationAddress { get; set; }

查看:

<div>
    <%=Html.RequiredLabelFor(m => m.CustomEmailConfirmationAddress) %>
    <%=Html.TextBoxFor(m => m.CustomEmailConfirmationAddress, new { maxlength = 100 })%>
    <%=Html.ValidationMessageFor(m => m.CustomEmailConfirmationAddress)%>
</div>

不工作:

场景 = 如果选中 ShowConceptOptInMessage,则需要 ConceptEmailOptInMessagePrivacyPolicy 字段。

型号:

[DisplayName("Show Concept Opt-In Message")]
public bool ShowConceptOptInMessage { get; set; }

[RequiredIfTrue("ShowConceptOptInMessage", ErrorMessage = "Concept Email Opt-In Message is required")]
[DisplayName("Concept Email Opt-In Message")]
public string ConceptEmailOptInMessage { get; set; }

[RequiredIfTrue("ShowConceptOptInMessage", ErrorMessage = "Concept Privacy Policy is required")]
[DisplayName("Concept Privacy Policy")]
public string PrivacyPolicy { get; set; }

查看:

<div>
    <%=Html.LabelFor(m => m.ShowConceptOptInMessage) %>
    <%=Html.CheckBoxFor(m => m.ShowConceptOptInMessage)%>
    <%=Html.ValidationMessageFor(m => m.ShowConceptOptInMessage)%>
</div>

 <div>
    <%=Html.LabelFor(m => m.ConceptEmailOptInMessage) %>
    <%=Html.TextAreaFor(m => m.ConceptEmailOptInMessage, new { maxlength = 1000 })%>
    <%= Html.ValidationMessageFor(m => m.ConceptEmailOptInMessage)%>
</div>

<div>
    <%=Html.LabelFor(m => m.PrivacyPolicy) %>
    <%=Html.TextAreaFor(m => m.PrivacyPolicy)%>
    <%= Html.ValidationMessageFor(m => m.PrivacyPolicy)%>
</div>

两种场景的控制器方法:

控制器:

[HttpPost]
public ActionResult Edit(ConceptConfigurationModel model)
{
    try
    {
        if (this.ModelState.IsValid)
        {
            // model
            this.ConceptManager.SaveConcept(model);
            model.Submitted = true;
        }
    }
    catch (BusinessLogicException ex)
    {
        this.ModelState.AddModelError("ConceptName", ex.Message);
    }
    ModelState.Clear();
    this.ConceptManager.FillConceptModel(model);

    return View(model);
}

使用 ASP.NET MVC 4,RequiredIf 不起作用,我使用 jquery unobtrusive 实现了相同的效果,添加下面的 javascript 方法

function AddValidation()
{
var showConceptOptInMessage = $("#ShowConceptOptInMessage").val();
  if(showConceptOptInMessage)
{
  $("#ConceptEmailOptInMessage").attr('data-val-required', 'Concept Email Opt-In Message is required');
  $("#PrivacyPolicy ").attr('data-val-required', 'Concept Privacy Policy is required');
 }
   $('form').removeData('validator');
    $('form').removeData('unobtrusiveValidation');
    $.validator.unobtrusive.parse('form');
}