2

我有一个带有 ASP 验证器(必填字段、正则表达式...)的 ASP .NET 页面以及用于额外验证的 java 脚本函数(例如,检查第二个日期是否大于第一个日期等)。

我通常这样做:

<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();")

但是页面不断推进到回发,即使在显示“无效”警报之后......有什么想法吗?谢谢!

4

3 回答 3

2

使用 CustomValidator 时,客户端验证函数需要接受arguments参数。然后,要将验证标记为失败,请设置arguments.IsValid为 false。这是CustomValidator 的 MSDN 页面

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

   alert('Not valid!');
   arguments.IsValid=false;
}
于 2010-10-25T17:23:27.140 回答
0

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

CustomValidator 使用ClientValidationFunctionOnServerValidate属性:

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

    }
于 2012-10-29T09:57:08.563 回答
0

I solved this problem by creating a variable:

 Boolean fieldIsValid = true;

and in the custom validating expression method I would change the value if arguments weren't true:

if(args.IsValid == false)
            {
                fieldIsValid = false;
            }
            else
            {
                fieldIsValid = true;
            }

Then, I also put that in the submit click method:

protected void submit_Click(object sender, EventArgs e)
        {
            if (fieldIsValid)
            {
                //submit my things
            }
        }
于 2017-06-27T16:25:57.333 回答