在asp.net Repeater中隐藏的必需字段验证器

时间:2016-08-18 09:40:58

标签: asp.net validation repeater

我在我的代码中重新开发并尝试使用asp.net必需字段验证器验证文本框。但验证麻烦 没有显示,我打开了开发人员工具,发现风格="可见性:隐藏"添加到必填字段验证器中。 以下是我的代码

<asp:Repeater ID="RepeaterCategory" runat="server" DataSource='<%# this.Categories.Count==0 ? null : this.Categories %>'>
    <ItemTemplate>
        <div>
            <asp:Label runat="server" Visible="true" Text="Category" />
            <asp:PlaceHolder runat="server" Visible="true">
                <asp:TextBox ID="txtCategoryID" runat="server" value="1" />
                <asp:TextBox ID="txtCategoryName" runat="server" value="<%# (Container.DataItem as Category).Name %>" />
                <asp:RequiredFieldValidator runat="server" ErrorMessage="<br/>This is a required field" ControlToValidate="txtCategoryName" ValidationGroup="NewCategoryGroup"></asp:RequiredFieldValidator>
            </asp:PlaceHolder>
            <asp:LinkButton runat="server" ToolTip="Save" ValidationGroup="NewCategoryGroup" OnClick="SaveCategory_Click"><img src='<%# some path%>/images/save.gif' /></asp:LinkButton>
            <asp:LinkButton runat="server" ToolTip="Close" OnClick="CloseCategory_Click"></asp:LinkButton>
        </div>
    </ItemTemplate>
</asp:Repeater>

文件背后的代码

protected void SaveCategory_Click(object o, EventArgs e)
{
    Page.Validate("NewCategoryGroup");
    if (!Page.IsValid)
        return;

    //logic
}

有人可以建议如何启用吗?

1 个答案:

答案 0 :(得分:0)

style="visibility:hidden"是默认行为。当错误消息需要显示时,它会更改为style="visibility: visible;"。因此,您可能没有错误。

验证器是&#39; RequiredFieldValidator&#39;,因为正在验证的文本框已经填充了值&#34; TestCategory&#34;没有错误。如果只是将文本添加到“保存”按钮(没有ID标记)以使其可见,请从txtCategoryName文本框中删除该值,然后单击“保存”按钮,您将看到错误消息。

这有效:

<asp:TextBox ID="txtCategoryName" runat="server" value="" />
<asp:RequiredFieldValidator runat="server" ErrorMessage="<br/>This is a required field" ControlToValidate="txtCategoryName" ValidationGroup="NewCategoryGroup"></asp:RequiredFieldValidator>

<asp:LinkButton runat="server" ToolTip="Save" ValidationGroup="NewCategoryGroup" OnClick="SaveCategory_Click" ID="LinkButton1">Save Me!</asp:LinkButton>

您不需要此代码

Page.Validate("NewCategoryGroup");
if (!Page.IsValid)

另一个优点是验证器现在可以在没有回发的情况下工作,这可以节省往返服务器。

并且总是进行服务器端验证,但尝试在没有回发的情况下进行第一次验证。

<强>更新

您想要的可能是每个项目的验证。由于您的验证组始终是相同的,因此它将触发所有文本框。试试这个:

<asp:Repeater ID="RepeaterCategory" runat="server">
    <ItemTemplate>
        <div>
            <asp:TextBox ID="txtCategoryName" runat="server" ValidationGroup='<%# "myVal_" + Container.ItemIndex %>' Text='<%# Eval("Category") %>' />
            <br />
            <asp:RequiredFieldValidator runat="server" Display="Dynamic" ErrorMessage="This is a required field<br />" ControlToValidate="txtCategoryName" ValidationGroup='<%# "myVal_" + Container.ItemIndex %>'></asp:RequiredFieldValidator>
            <asp:LinkButton runat="server" ValidationGroup='<%# "myVal_" + Container.ItemIndex %>' OnClick="Button1_Click" ID="LinkButton1">Save Me!</asp:LinkButton>
        </div>
    </ItemTemplate>
</asp:Repeater>