ASP.NET自定义验证器和AJAX

时间:2013-06-18 07:15:14

标签: c# asp.net ajax web-services customvalidator

我用AJAX实现了一个自定义验证器,它工作正常:

EDITED 即可。添加ASPX代码

<asp:DetailsView ID="DetailsView" runat="server" Height="50px" Width="25em" DataSourceID="SqlDataSource1" AutoGenerateRows="False" DefaultMode="Insert" CellPadding="4" ForeColor="#333333" GridLines="None" OnItemInserting="DetailsView_ItemInserting">
        <Fields>
            <asp:TemplateField HeaderText="Nombre *">
                <InsertItemTemplate>
                    <asp:TextBox ID="txtNombre" runat="server" Text='<%# Bind("nombre) %>'></asp:TextBox>
                    <asp:RequiredFieldValidator ID="requireNombre" runat="server" ControlToValidate="txtNombre" ErrorMessage="El campo 'Nombre' no puede estar vacío." ValidationGroup="DetailsGroup" Display="None"></asp:RequiredFieldValidator>
                    <asp:CustomValidator id="CustomValidator1" ControlToValidate="txtNombre" ClientValidationFunction="validateNombre" ValidationGroup="DetailsGroup" Display="none" ErrorMessage="Introduzca un nombre diferente." runat="server"/>
                </InsertItemTemplate>
            </asp:TemplateField>
        </Fields>
    </asp:DetailsView>

功能AJAX:

        function validateNombre(src, args) {
        var isValid;
        $.ajax({
            type: "POST",
            url: "Nombre.aspx/ComprobarNombre",
            data: "{'nombre': '" + args.Value + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function (msg) {
                isValid = msg.d;
            }
        });
        args.IsValid = isValid;

ComprobarNombre: [的WebMethod()]

    public static bool ComprobarNombre(string nombre)
        {
            /* SQLConnections... */

            if(...)
                 return false;
            else
                 return true;
        }

问题是每次在TextBox中输入值时都会启动AJAX函数。我只需要在单击表单按钮时启动该功能。

1 个答案:

答案 0 :(得分:-1)

1)消除自定义验证器 2)在按钮上单击调用客户端函数validateNombre() 3)获取函数内的文本框数据 4)并将其作为数据参数传递