我有一个带有ASP验证器的ASP .NET页面(必填字段,正则表达式......)以及用于其他验证的java脚本函数(例如,检查第二个日期是否大于第一个日期等)。 / p>
我通常会这样做:
<script type="text/javascript">
function validate() {
// ...
alert('Not valid!');
return false;
}
</script>
<asp:Button ID="Button1" runat="server" Text="Add"
OnClientClick="return validate();" OnClick="Button1_Click" />
因此,如果asp和javascript验证都通过,按钮会前进到回发,并且它可以正常工作。
我正在尝试自定义验证器:
<asp:CustomValidator ID="CustomValidator1"
EnableClientScript="true" runat="server" ControlToValidate="TextBox1"
ClientValidationFunction="validate();" >
</asp:CustomValidator>
(也尝试使用ClientValidationFunction =“return validate();”)
但即使在显示“无效”提醒之后,该页面仍在不断推进回发......有什么想法吗?谢谢!
答案 0 :(得分:2)
使用CustomValidator时,客户端验证功能需要接受源和参数参数。然后,要将验证标记为失败,请将arguments.IsValid
设置为false。这是MSDN page for the CustomValidator。
function validate(source, arguments) {
// ...
alert('Not valid!');
arguments.IsValid=false;
}
答案 1 :(得分:0)
CustomValidator使用 ClientValidationFunction 和 OnServerValidate 属性:
<asp:CustomValidator ID="cvCreditCard" runat="server" ErrorMessage="Error Message" ControlToValidate="txtCardNumber" ClientValidationFunction="Validators.CardNumber" OnServerValidate="ValidateCreditCardValid">*</asp:CustomValidator>
客户端验证:
var Validators = {
CardNumber: function (source, clientside_arguments) {
var valid_val = true;
var txtCardNumber = clientside_arguments.Value; //(return the ControlToValidate value)
//make your checks here
clientside_arguments.IsValid = valid_val;
}}
服务器端验证:
protected void ValidateCreditCardValid(object sender, ServerValidateEventArgs e)
{
//make your checks here
e.IsValid = false;
}
答案 2 :(得分:0)
我通过创建变量解决了这个问题:
Boolean fieldIsValid = true;
并且在自定义验证表达式方法中,如果参数不是真的,我会更改值:
if(args.IsValid == false)
{
fieldIsValid = false;
}
else
{
fieldIsValid = true;
}
然后,我也将其放在提交点击方法中:
protected void submit_Click(object sender, EventArgs e)
{
if (fieldIsValid)
{
//submit my things
}
}