[英]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 。 將其從工具箱中拖放到頁面設計中。
設置以下屬性:
如果即使值未通過驗證也不會發布表單,則設置EnableClientScript = false
,以便僅在服務器端發布並驗證表單。
請記住,如果您不想允許空條目,則還需要使用RequiredFieldValidator
。
您應該查看RangeValidator
或ASP.NET中內置的任何其他驗證器控件。 這是最簡單的方法,因為它可以跨瀏覽器工作。 只需設置MinimumValue
, MaximumValue
, Type
和Text
到適當的值; 您甚至可以使用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.