不显示自定义的验证消息(Custom validator message not displayin

2019-10-20 07:29发布

  • VS2013,WebForms的,.NET 4.51

我有一个FormView定义,在我EditTemplate我有如下:

 <div class="form-group">
    <asp:Label ID="lblClientClassification" CssClass="col-md-2 control-label" runat="server" for="cblClientClassifications" Text="Kind"></asp:Label>
     <div class="col-md-5">
         <asp:CheckBoxList ID="cblClientClassifications" runat="server"></asp:CheckBoxList>
         <asp:CustomValidator ID="cfvClientKinds" runat="server" Display="Dynamic" CssClass="label label-danger" ErrorMessage="XXXX" ValidationGroup="Default" OnServerValidate="cfvClientClassifications_OnServerValidate"></asp:CustomValidator>
 </div>

然后在后面的代码:

    protected void cfvClientClassifications_OnServerValidate(object aSource, ServerValidateEventArgs aArgs)
    {
        CustomValidator cvCheckBoxKinds = aSource as CustomValidator;
        int checkedCount = 0;
        if (cvCheckBoxKinds != null)
        {
            CheckBoxList cblClientClassifications = GuiClientClassificationsFind();
            foreach (ListItem listItem in cblClientClassifications.Items)
            {
                if (listItem.Selected)
                {
                    checkedCount++;
                }
            }

            if (checkedCount == 0)
            {
                aArgs.IsValid = false;
                cvCheckBoxKinds.ErrorMessage = "Select client kind.";
            }
        }
    }

该OnServerValidate被解雇,我越来越设置为验证设置错误消息无效以及(Page.IsValid也是假的预期)。 但是,错误文字显示。 当我查看网页源我看到:

<span id="ctl00_cphMainContent_fvData_cfvClientKinds" class="label label-danger" style="display:none;">XXXX</span>

而不是我设定的错误信息,以及一个事实,即它是不可见的。

有没有人有任何指针在这里如何跟踪下来? 我已经看过SO的类似的问题,但没有任何评论似乎适用。 这是关系到FormView控件可能?

Answer 1:

试试你的控制没有的CssClass =“标签标签危险”引导第一,并使用下面的代码来检查您的箱子:

    protected void cfvClientKinds_ServerValidate(object aSource, ServerValidateEventArgs aArgs)
    {
        aArgs.IsValid = cblClientClassifications.SelectedItem != null;
        cfvClientKinds.ErrorMessage = "Hey! this is a new message";
    }

我猜你火上述事件之前调用此行:

    protected void btnValidate_Click(object sender, EventArgs e)
    {
        Page.Validate();
    }


Answer 2:

总之,我认为你的问题或者与您寻找的方式cblClientClassifications的CheckBoxList或者你没有上述其他代码。

CheckBoxList cblClientClassifications = GuiClientClassificationsFind();

我决定尝试一下你的情况下,创造了一个新的Web窗体添加FormView控件并将其绑定到罗斯文类别表,然后里面EditItemTemplate中我加了一个CheckBoxList的手动填充它。 添加的CustomValidator双点击它复制你的代码隐藏和它的作品对我来说除了部分的FindControl: GuiClientClassificationsFind(); 这里是FormView控件:

<asp:FormView ID="FormView1" runat="server" DataKeyNames="CategoryID" DataSourceID="SqlDataSource1">
    <EditItemTemplate>
        ...
        <asp:CheckBoxList ID="cblClientClassifications" runat="server">
            <asp:ListItem>Bir</asp:ListItem>
            <asp:ListItem>iki</asp:ListItem>
            <asp:ListItem>Üç</asp:ListItem>
            <asp:ListItem>Dört</asp:ListItem>
        </asp:CheckBoxList>
        <asp:CustomValidator ID="cfvClientKinds" runat="server" Display="Dynamic" CssClass="label label-danger" ErrorMessage="CustomValidator" OnServerValidate="cfvClientKinds_ServerValidate"></asp:CustomValidator>
        <br />
        <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="Update" />
        &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
    </EditItemTemplate>
</asp:FormView>

并与您的代码代码隐藏:

protected void cfvClientKinds_ServerValidate(object aSource, ServerValidateEventArgs aArgs)
        {
            CustomValidator cvCheckBoxKinds = aSource as CustomValidator;
            CheckBoxList cblClientClassifications = (CheckBoxList)FormView1.FindControl("cblClientClassifications");
            int checkedCount = 0;
            if (cvCheckBoxKinds != null)
            {
                foreach (ListItem listItem in cblClientClassifications.Items)
                {
                    if (listItem.Selected)
                    {
                        checkedCount++;
                    }
                }

                if (checkedCount == 0)
                {
                    aArgs.IsValid = false;
                    cvCheckBoxKinds.ErrorMessage = "Select client kind.";
                }
            }
        }

我阿里Shahrokhi的方法更短,工作以及你的..

protected void cfvClientKinds_ServerValidate(object aSource, ServerValidateEventArgs aArgs)
        {
            CustomValidator cvCheckBoxKinds = aSource as CustomValidator;
            CheckBoxList cblClientClassifications = (CheckBoxList)FormView1.FindControl("cblClientClassifications");
            aArgs.IsValid = cblClientClassifications.SelectedItem != null;
            cvCheckBoxKinds.ErrorMessage = "Select client kind.";
        }

如果你检查你的FormView控件进入EditItemTemplate里你提交你的customvalidators之前看到span将在那里就像你提到的那是因为服务器没有它发送到客户端还莫名其妙。



文章来源: Custom validator message not displaying