簡體   English   中英

我的驗證器都沒有工作

[英]None of my validators are working

我在表單上有一個字段,允許用戶輸入0到5000之間的數字

我嘗試了3種不同的方法,但是當我輸入的數字都大於5000時,對於這三種方法,都可以接受我的表單提交,這種情況不應該發生:

方法1:

<asp:CustomValidator ControlToValidate="price" runat="server" ID ="inrange" 
                     ErrorMessage="Must not exceed 5k" 
                     OnServerValidate="lessThan5k">
</asp:CustomValidator>

這個代碼在后面的代碼中

protected void lessThan5k(object sender, ServerValidateEventArgs e)
{
  if (Convert.ToInt32(price.Value) < 5000)
  {
    e.IsValid = true;
  }
  else
  {
    e.IsValid = false;
  }
}

方法2:

<script type="text/javascript">

  var listen = document.getElementById("price");

  listen.addEventListener("input", function () {
    var value = new parseInt(price.Value);
    if (value > 5000) {
      price.setCustomValidity("must not exceed 5000");
    } else {
      price.setCustomValidity("");
    }
  });
</script>

最后但並非最不重要的方法3:

限制表單字段的數字范圍的正確方法是什么?

使用RangeValidator 將其從工具箱中拖放到頁面設計中。

設置以下屬性:

  • ControlToValidate->您的文本框ID
  • 類型->整數(以便將其視為整數)
  • 最小值-> 0
  • 最大值-> 5000

如果即使值未通過驗證也不會發布表單,則設置EnableClientScript = false ,以便僅在服務器端發布並驗證表單。

請記住,如果您不想允許空條目,則還需要使用RequiredFieldValidator

您應該查看RangeValidator或ASP.NET中內置的任何其他驗證器控件。 這是最簡單的方法,因為它可以跨瀏覽器工作。 只需設置MinimumValueMaximumValueTypeText到適當的值; 您甚至可以使用EnableClientScript屬性允許客戶端驗證。

<asp:RangeValidator id="inrange"
    ControlToValidate="price"
    MinimumValue="0"
    MaximumValue="5000"
    Type="Integer"
    EnableClientScript="true"
    Text="Must not exceed 5k"
    runat="server"/>

或者,查看掛鈎表單提交按鈕上的click事件並執行客戶端對值的檢查,然后在值無效時取消單擊。 但是,您仍然需要對值進行服務器端驗證,因為您不能保證用戶的計算機上啟用了JavaScript(這意味着他們將能夠提交無效的數據)。

function validatePrice(e){
    var value = new parseInt(price.Value);
    if (value > 5000) {
      price.setCustomValidity("must not exceed 5000");
      e.preventDefault();
    } else {
      price.setCustomValidity("");
    }
};

if (window.addEventListener){
    document.getElementById("price").addEventListener("click", validatePrice);
} else if (window.attachEvent){
    document.getElementById("price").attachEvent("click", validatePrice);
}

您的原始JavaScript代碼應該鈎住“輸入”,而應鈎住“ click”事件。 另外,您需要知道該代碼無法在IE9以下的任何版本上運行……對於這些,您需要使用attachEvent而不是addEventListener

純HTML5方法(不一定是跨瀏覽器)是在輸入元素本身上設置屬性。

<input type="number" min="0" max="5000" step="0.01" placeholder="Price" />

這將告訴兼容的瀏覽器在允許提交表單之前執行瀏覽器端驗證。 Chrome支持所有這些屬性,Firefox支持我列出的大多數屬性,但是IE並不十分支持它們。

您想參加哪個活動?

輸入可能不是正確的輸入。

要么鈎住字段上的模糊事件或偶然事件,要么鈎到表單上的Submit事件。

我認為您當前的代碼根本無法執行。

同意鎮定!

要在服務器端檢查頁面是否有效,按鈕的click事件應如下所示:

 protected void btnSubmit_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            lblResponse.Text = "Page successfully submitted!";
        }
    }

暫無
暫無

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

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