簡體   English   中英

如何根據所選的單選按鈕顯示和驗證文本框

[英]How to display and validate textbox based on radio button selected

根據單選按鈕選擇,我有這2個單選按鈕,我應該顯示文本框,還要驗證文本框。 如果我選擇單選按鈕是,文本框為null,則應該顯示錯誤。 使用下面的代碼,我只能顯示和隱藏文本框,而不能驗證文本框。 請提出解決方案。

型號:

public class CustomerModel  
{
  [Required(ErrorMessage = "Please select subscribe option")]
  public bool Subscribe {get; set;}

  public string Email {get; set;}
}

查看:

  function ShowHideDiv() { var chkYes = document.getElementById("Yes"); var dvtext = document.getElementById("dvtext"); dvtext.style.display = chkYes.checked ? "block" : "none"; } $(function () { warningel = document.getElementById('lbError'); $("#radio").submit(function () { if ($('#Yes').is(':checked') && !$.trim($('#Email').val())) { warningel.innerHTML = "Please Enter Email"; return false; } }); }); 
  <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) <div id='lbError' style="color: red;"></div> @Html.ValidationMessageFor(m => m.Email) </div> </div> 

我認為一個更干凈的解決方案將只使用javascript來顯示/隱藏文本框,並讓MVC處理驗證,您可以僅通過從IValidatableObject繼承來獲得驗證。

假設您在某處有一個isValidEmail()自定義方法來檢查提供的字符串:

public class CustomerModel : IValidatableObject
{
    public bool Subscribe {get; set;}
    public string Email {get; set;}

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (Subscribe && !isValidEmail()) 
        {
            yield return new ValidationResult("Please enter valid email address");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM