2016-04-11 4 views
1

Я использую аннотации данных для проверки на стороне клиента. У меня есть два сценария, в которых я использую [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 является контро- d, чем ConceptEmailOptInMessage и PrivacyPolicy требуется поле.

Модель:

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

Не знаю, почему вы приняли ответ, который не имеет ничего общего с вашей проблемой и является просто ужасный хак. Предполагая, что вы используете [foolproof] (http://foolproof.codeplex.com/) '[RequiredIfTrue]', и вы включили соответствующие сценарии, ваш код работает нормально. –

ответ

2

С ASP.NET MVC 4, RequiredIf является не работает, я пр достигается то же с помощью JQuery ненавязчивым, добавьте ниже 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'); 
} 
+0

Я добавил это, и значение 'showConceptOptInMessage' приходит как' undefined'. Что мне здесь не хватает? Как вызвать эту функцию или что передать в качестве контейнера, если я делаю что-то вроде этого? <% = Html.CheckBoxFor (m => m.SnapfingerOptInDefaultToChecked, new {onclick = "AddValidation()"})%> '. Или есть ли другой способ вызвать эту функцию в событии щелчка на флажке? – CSharper

+0

Я отредактировал ответ, удалил контейнер, поскольку у вас нет div, который является основным именем div, напрямую вызывает элементы dom внутри метода, то есть AddValidation() {$ ("# ShowConceptOptInMessage"). Val() } – Thejaswy

+0

Я понял это, но проблема в том, что, как только я проверю поле, оно работает, но когда я его отключил, эта проверка должна быть удалена, что не происходит. Я попробовал '$ (" #ConceptEmailOptInMessage "). Attr ('data-val-required', 'Concept Email Opt-In Message required', true);' & '$ (" #ConceptEmailOptInMessage "). Attr ('data «обязательный -валютный», «Сообщение об ошибке« Email Email-сообщение »обязательно», false); 'который не работает – CSharper

Смежные вопросы