【问题标题】:CustomValidator not fired in gridview未在 gridview 中触发 CustomValidator
【发布时间】:2014-12-29 10:21:36
【问题描述】:

我有一个gridview,我正在尝试创建一个插入页脚。插入的数据必须是唯一的,所以我创建了一个自定义验证器。问题是我无法在按下链接按钮时触发验证器。

        <asp:TemplateField HeaderText="id" SortExpression="id">
            <EditItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:LinkButton ID="LinkButtonInsert" runat="server" OnClick="updateData">Adauga</asp:LinkButton>
            </FooterTemplate>
        </asp:TemplateField>
            <asp:TemplateField HeaderText="name" SortExpression="name">

        <asp:TemplateField HeaderText="name" SortExpression="name">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("name") %>' ></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Bind("name") %>' PostBackUrl='<%# "~/login.aspx?UserID=" + Eval("name") %>'>
                    </asp:LinkButton>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="TextBoxName" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator id="RequiredFieldValidator" runat="server" controlToValidate="TextBoxName" Text ="*" ValidationGroup = "INSERT"
                        ErrorMessage="Introduceti numele categoriei" forecolor="red"></asp:RequiredFieldValidator>
                    <asp:CustomValidator ID="CustomValidatorText" runat="server" ErrorMessage="Exista deja categoria" controlToValidate="TextBoxName" ValidationGroup = "INSERT"
                    forecolor="red" OnServerValidate="CheckCategoryAvailability"></asp:CustomValidator>
                </FooterTemplate>
            </asp:TemplateField>

这里是背景代码:

    protected void CheckCategoryAvailability(object source, ServerValidateEventArgs args)
    {

        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        con.Open();
        string textBoxName = ((CustomValidator)source).ControlToValidate;

        var textBox = ((CustomValidator)source).Parent.FindControl(textBoxName) as TextBox;

        string txt = textBox.Text;
        Response.Write(textBox.Text);
        SqlCommand com = new SqlCommand("select count(*) from Chapter where name = '" + txt +"';", con);
        Response.Write(com.ExecuteScalar());
        int temp = Int32.Parse(com.ExecuteScalar().ToString());
        if (temp == 1)
        {
            args.IsValid = false;
        }
        else
        {
            args.IsValid = true;
        }

    }

    protected void updateData(object source, EventArgs args)
    {
        Response.Write(Page.IsValid);
    }

【问题讨论】:

    标签: c# asp.net gridview validation


    【解决方案1】:

    您必须将ValidationGroup 属性也放在LinkButton 标记中:

    <asp:LinkButton ID="LinkButtonInsert" runat="server" OnClick="updateData" ValidationGroup="INSERT">Adauga</asp:LinkButton>
    

    【讨论】:

      【解决方案2】:

      更简单的选择

      复制具有不同ID的自定义验证器,但调用相同的函数将文本字段值作为args参数传递

      Protected Sub customvalidator1_ServerValidate(source As Object, args As ServerValidateEventArgs)        
           If args.Value.contains("X") Then
              args.IsValid = False
           End If
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2010-11-26
        • 1970-01-01
        • 2011-11-25
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-03
        相关资源
        最近更新 更多