【问题标题】:Required Field Validator hidden in asp.net Repeater隐藏在 asp.net 中继器中的必填字段验证器
【发布时间】:2016-12-25 04:29:23
【问题描述】:

我的代码中有中继器,并尝试使用 asp.net 必填字段验证器来验证文本框。但是验证消息 不显示,我打开开发者工具,发现 style="visibility:hidden" 添加到必填字段验证器中。 下面是我的代码

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

谁能建议如何启用它?

【问题讨论】:

    标签: asp.net validation repeater


    【解决方案1】:

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

    验证器是“RequiredFieldValidator”,并且由于正在验证的文本框已经填充了值“TestCategory”,因此没有错误。如果您只是将文本添加到“保存”按钮(没有 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>
    

    【讨论】:

    • RequiredFieldValidator 是否有效?如果不复制我的示例,请对其进行测试,如果它有效,请根据您的需要进行更改。
    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2010-11-26
    • 2013-03-23
    相关资源
    最近更新 更多