Проверка TextBox на основе выбора переключателя - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть эти две радиокнопки для подписки.Если клиент выбирает переключатель «Да», то я показываю текстовое поле ввода адреса электронной почты.Если клиент выбирает «да», то текстовое поле адреса электронной почты обязательно.Как добавить условную проверку внутри модели?

Модель:

public class CustomerModel  
{
  [Required]
  public bool Subscribe {get; set;}

  [RequiredIfYes]
  public string Email {ger; set;}
}

Пользовательский класс проверки:

    public class RequiredIfYesAttribute : Attribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value == "Yes")
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult("Email is Required.");
        }
    }
}

Просмотр:

 <div class="form-group col-md-12 ">
                    <label class="required" for="subscribe">Email Subsciption</label>
                    <span >Yes : <input type="radio" value="Yes" name="Subscribe" id="chkYes" onclick="ShowHideDiv()" /></span>
                    <span >No : <input type="radio" value="No" name="Subscribe" id="chkNo" onclick="ShowHideDiv()" /></span>
          @Html.ValidationMessageFor(model => model.Subscribe)
                </div>
                <div id="dvtext" style="display: none">
                    <label for="email" class="required">Enter Email</label>
                    <div style="width:300px;">
                        @Html.TextBoxFor(model => model.Email)
                        @Html.ValidationMessageFor(model => model.Email)
                    </div>
                </div>

1 Ответ

0 голосов
/ 01 марта 2019

Попробуйте этот код для пользовательской проверки:

 public class RequiredIfYesAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var radioName = validationContext.ObjectInstance.GetType().GetProperty("Subscribe");
        string radioValue = radioName.GetValue(validationContext.ObjectInstance, null)?.ToString();

        var emailName = validationContext.ObjectInstance.GetType().GetProperty("Email");
        string emailValue = emailName.GetValue(validationContext.ObjectInstance, null)?.ToString();

        if (radioValue == "Yes" && string.IsNullOrEmpty(emailValue))
        {
            return new ValidationResult("Email is Required.");
        }
        else
        {
            return ValidationResult.Success;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...