2016-04-11 20 views
1

İstemci tarafı doğrulamaları için veri ek açıklamaları kullanıyorum. [Required] ve [RequiredIfTrue] kullanıyorum iki senaryo var. Sorun benim şartlı doğrulamalarım çalışmıyor.Koşullu doğrulamalar çalışmıyor

Çalışma:

Modeli:

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

Görünüm:

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

Çalışma DEĞİL:

Senaryo = ShowConceptOptInMessage checke ise d ConceptEmailOptInMessage ve PrivacyPolicy alanlarını doldurmak için gereklidir.

Modeli:

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

Görünüm:

<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> 
hem senaryo için

Kontrolör yöntemi:

Denetleyici:

ASP.NET MVC 4 ile
[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); 
} 
+0

emin değilim. [Foolproof] (http://foolproof.codeplex.com/) '[RequiredIfTrue]' yi kullandığınızı varsayarak ilgili betikleri ekledikten sonra kodunuz iyi çalışıyor. –

cevap

2

, RequiredIf olduğunu çalışmıyor, ben ave aynı kullanarak jquery mütevazi aşağıya ekleyin elde javascript yöntem, sorunla ilgisi yoktur ve sadece korkunç bir kotarımdır bir cevap nedenle kabul ettim

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'); 
} 
+0

Bunu ekledim ve 'showConceptOptInMessage 'değeri' undefined' olarak geliyor. Burada neyi özlüyorum? Bu işlevi nasıl çağırırım veya bu gibi bir şey yapsam kapsayıcı olarak nasıl geçilir '<% = Html.CheckBoxFor (m => m.SnapfingerOptInDefaultToChecked, new {onclick = "AddValidation()"})%> '. Veya bu işlevi onay kutusu tıklatma olayında çağırmanın başka bir yolu var mı? – CSharper

+0

Yanıtladığınız cevabı, ana div adı olan div olmadığından, kapsayıcıyı kaldırdım, doğrudan yöntemdeki dom öğelerini, yani AddValidation() {$ ("# ShowConceptOptInMessage")) çağırın. } – Thejaswy

+0

Bunu çözdüm ama sorun şu ki, saha çalışıp çalışmadığını kontrol ettiğimde ancak kontrol edemediğimde, bu doğrulamalar kaldırılmalı. $ ("#ConceptEmailOptInMessage") denedim attr ('data-val-required', 'Concept Email Opt-In Mesajı gerekli', true); '&' $ ("#ConceptEmailOptInMessage"). Attr ('data -val-gerekli ',' Konsept E-posta Etkinlige Girme Gerekir ', false); 'addvalidasyon yöntemini çağırdığınız her seferde – CSharper