C# 我的验证器都没有工作
我在表单上有一个字段,允许用户输入0到5000之间的数字 我尝试了3种不同的方法,但对于所有三种方法,当我输入的数字大于5000时,我的表格提交被接受,这是不应该发生的: 方法1: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
<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中输出比较值,这样您将看到它是否正确比较