【问题标题】:Validate TextBox Based on radio button selection基于单选按钮选择验证文本框
【发布时间】:2019-03-01 23:21:23
【问题描述】:

我有这两个用于订阅的单选按钮。如果客户选择是单选按钮,那么我将显示输入电子邮件地址文本框。如果客户选择是,则电子邮件地址文本框为必填项。如何在模型内部添加条件验证?

型号:

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>

【问题讨论】:

标签: c# asp.net-mvc razor


【解决方案1】:

试试这个代码进行自定义验证:

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

【讨论】:

  • 当我选择无单选按钮时,电子邮件文本将为空。但它在 emailValue "System.NullReferenceException: Object reference not set to an instance of an object"处给了我一个错误。
  • 答案已更新。 Null 条件运算符 ? 加在两个ToString()s 之前。
猜你喜欢
  • 1970-01-01
  • 2016-04-09
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多