C# 我的验证器都没有工作

C# 我的验证器都没有工作,c#,javascript,asp.net,visual-studio-2010,validation,C#,Javascript,Asp.net,Visual Studio 2010,Validation,我在表单上有一个字段,允许用户输入0到5000之间的数字 我尝试了3种不同的方法,但对于所有三种方法,当我输入的数字大于5000时,我的表格提交被接受,这是不应该发生的: 方法1: <asp:CustomValidator ControlToValidate="price" runat="server" ID ="inrange" ErrorMessage="Must not exceed 5k" O

我在表单上有一个字段,允许用户输入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;
  }
}
protectedvoid lessThan5k(对象发送方、服务器验证目标)
{
if(转换为32(价格值)<5000)
{
e、 IsValid=true;
}
其他的
{
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>

var listen=document.getElementById(“价格”);
listen.addEventListener(“输入”,函数(){
var值=新的parseInt(price.value);
如果(值>5000){
价格。setCustomValidity(“不得超过5000”);
}否则{
价格有效期(“”);
}
});
最后但并非最不重要的方法3:


限制表单字段数字范围的正确方法是什么?

您应该查看
RangeValidator
或ASP.NET中内置的任何其他验证程序控件。这是最简单的方法,因为它可以跨浏览器工作。只需将
最小值
最大值
类型
文本
设置为适当的值;您甚至可以使用
EnableClientScript
属性允许客户端验证

<asp:RangeValidator id="inrange"
    ControlToValidate="price"
    MinimumValue="0"
    MaximumValue="5000"
    Type="Integer"
    EnableClientScript="true"
    Text="Must not exceed 5k"
    runat="server"/>
您的原始JavaScript代码钩住了“输入”,而它应该钩住“点击”事件。此外,您需要知道,该代码在IE9以下的任何内容上都不起作用……对于这些内容,您需要使用
attachEvent
而不是
addEventListener

纯HTML5方法(不一定是跨浏览器的)是在输入元素本身上设置属性

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


这将告诉兼容浏览器在允许提交表单之前执行浏览器端验证。Chrome支持所有这些属性,Firefox支持我列出的大多数属性,但IE不太支持它们。

您应该查看
RangeValidator
或ASP.NET中内置的任何其他验证程序控件。这是最简单的方法,因为它可以跨浏览器工作。只需将
最小值
最大值
类型
文本
设置为适当的值;您甚至可以使用
EnableClientScript
属性允许客户端验证

<asp:RangeValidator id="inrange"
    ControlToValidate="price"
    MinimumValue="0"
    MaximumValue="5000"
    Type="Integer"
    EnableClientScript="true"
    Text="Must not exceed 5k"
    runat="server"/>
您的原始JavaScript代码钩住了“输入”,而它应该钩住“点击”事件。此外,您需要知道,该代码在IE9以下的任何内容上都不起作用……对于这些内容,您需要使用
attachEvent
而不是
addEventListener

纯HTML5方法(不一定是跨浏览器的)是在输入元素本身上设置属性

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


这将告诉兼容浏览器在允许提交表单之前执行浏览器端验证。Chrome支持所有这些属性,Firefox支持我列出的大多数属性,但IE不太支持这些属性。

你正在关注哪个事件

输入可能不正确

钩住字段上的模糊或偶然事件或表单上的提交事件


我认为您当前的代码根本不会执行。

您正在连接到哪个事件

输入可能不正确

钩住字段上的模糊或偶然事件或表单上的提交事件

我认为您当前的代码根本无法执行。

请使用。从工具箱中拖动它,并将其放到页面设计中

设置以下属性:

  • ControlToValidate-->您的文本框Id
  • 键入-->整数(以便将其视为整数)
  • 最小值-->0
  • 最大值-->5000
如果即使该值未通过验证,您也不会发布要发布的表单,请设置
EnableClientScript=false
,以便仅在服务器端发布和验证该表单

请记住,如果您不想允许空条目,您还需要使用
RequiredFieldValidator

使用。从工具箱中拖动它,并将其放到页面设计中

设置以下属性:

  • ControlToValidate-->您的文本框Id
  • 键入-->整数(以便将其视为整数)
  • 最小值-->0
  • 最大值-->5000
如果即使该值未通过验证,您也不会发布要发布的表单,请设置
EnableClientScript=false
,以便仅在服务器端发布和验证该表单

请记住,如果您不想允许空条目,还需要使用
RequiredFieldValidator

同意saluce

要在服务器端检查页面是否有效,按钮的单击事件应如下所示:

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

要在服务器端检查页面是否有效,按钮的单击事件应如下所示:

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

为什么不编写一些javascript或jquery并检查值是否大于5000?这样一来,表单甚至没有机会访问服务器?或者,您不能使用验证器吗?@JonH方法2似乎是JavaScript。jsmith-仅在HTML5()中,“输入”事件似乎有效,这可能是一个因素吗?向验证函数添加一个警报,以在if中输出比较值,通过这种方式,您将看到它的比较是否正确,更重要的是代码是否运行。为什么不编写一些javascript或jquery并检查值是否大于5000?这样一来,表单甚至没有机会访问服务器?或者,您不能使用验证器吗?@JonH方法2似乎是JavaScript。jsmith-只有在HTML5()中,“输入”事件才有效。这可能是一个因素吗?向验证函数添加一个警报,以在if中输出比较值,这样您将看到它是否正确比较