Я использую аннотации данных для проверки на стороне клиента. У меня есть два сценария, в которых я использую [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);
}
Не знаю, почему вы приняли ответ, который не имеет ничего общего с вашей проблемой и является просто ужасный хак. Предполагая, что вы используете [foolproof] (http://foolproof.codeplex.com/) '[RequiredIfTrue]', и вы включили соответствующие сценарии, ваш код работает нормально. –