ASP CustomValidator,推进错误后回发

时间:2010-10-25 16:43:46

标签: javascript asp.net validation customvalidator

我有一个带有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();”)

但即使在显示“无效”提醒之后,该页面仍在不断推进回发......有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:2)

使用CustomValidator时,客户端验证功能需要接受参数参数。然后,要将验证标记为失败,请将arguments.IsValid设置为false。这是MSDN page for the CustomValidator

function validate(source, arguments) {
   // ...

   alert('Not valid!');
   arguments.IsValid=false;
}

答案 1 :(得分:0)

像@Jason写道,当使用CustomValidator客户端时,除了源和参数参数之外。 客户端和服务器端使用CustomValidator的快速示例。

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
            }
        }