【问题标题】:Default Button not working with multiple validation groups默认按钮不适用于多个验证组
【发布时间】:2013-11-22 19:00:32
【问题描述】:

非常感谢您花时间阅读本文。我有一个问题,我在从后面的代码加载页面时为 ASP.NET 页面设置了默认按钮,但是现在我有多个针对一个控件的验证组,这不再起作用。现在,当我在该控件(文本框)中按 Enter 键时,将触发两个组的验证减去验证摘要文本。

这是我的示例代码:

ASPX

<table>
    <tr>
        <td><asp:Textbox runat="server" ID="validateMe"></asp:TextBox></td>
        <td><asp:RequiredFieldValidator ID="firstValidator" runat="server" ErrorMessage="First check not valid" Text="*" ControlToValidate="validateMe" ValidationGroup="firstGroup"></asp:RequiredFieldValidator>
        <td><asp:RequiredFieldValidator ID="secondValidator" runat="server" ErrorMessage="Second check not valid" Text="*" ControlToValidate="validateMe" ValidationGroup="secondGroup"></asp:RequiredFieldValidator>
    </tr>
    <tr>
    <td><asp:Button runat="server" ID="firstButton" Text="V1" ValidationGroup="firstGroup"/></td>
    <td><asp:Button runat="server" ID="secondButton" Text="V2" ValidationGroup="secondGroup"/></td>
    </tr>
<table>

<asp:ValidationSummary ID="firstSummary" runat="server" ValidationGroup="firstGroup"/>
<asp:ValidationSummary ID="secondSummary" runat="server" ValidationGroup="secondGroup"/>

C#

protected void Page_Load(object sender, EventArgs e)
{
    this.Form.DefaultButton = firstButton.UniqueID;
}

如果我使用它并在文本框内按“Enter”而不在其中输入任何内容,则不会出现任何验证摘要,但文本框旁边会有两个星号(每个组一个星号)。如果用户按下“Enter”,我希望仅使用应该分配给 DefaultButton 的第一组(此处为“firstButton”)进行完整验证。如果用户点击了“firstButton”,是否有任何方法可以实现此功能并启动客户端验证?

我还尝试将整个表格以及验证摘要包装在一个 asp:Panel 中并在那里设置 DefaultButton,但我收到了相同的结果。任何正确方向的帮助或指示将不胜感激!

【问题讨论】:

  • 试着看看这里的例子:w3schools.com/aspnet/control_validationsummary.asp 他们是很好的例子,会比我能解释得更好。
  • 我向 DMA 道歉,但我还没有在 w3 网站上找到任何可以帮助解决此问题的内容。验证摘要和默认按钮页面包含对这些控件的非常简单的解释,并且不提供我尚未尝试过的任何解决方案,也没有解释为什么在单个控件上存在多个验证时默认按钮不起作用。

标签: c# asp.net validation defaultbutton


【解决方案1】:

设置

EnableClientScript="false"

在RequiredFieldValidator 控件中。会有帮助的。

<asp:Panel runat="server" DefaultButton="secondButton">
    <table>
        <tr>
            <td>
                <asp:TextBox runat="server" ID="validateMe"></asp:TextBox></td>
            <td>
                <asp:RequiredFieldValidator ID="firstValidator" runat="server" ErrorMessage="First check not valid" Text="*" ControlToValidate="validateMe" EnableClientScript="false" ValidationGroup="firstGroup"></asp:RequiredFieldValidator>
            </td>
            <td>
                <asp:RequiredFieldValidator ID="secondValidator" runat="server" ErrorMessage="Second check not valid" Text="*" ControlToValidate="validateMe" EnableClientScript="false" ValidationGroup="secondGroup"></asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td>
                <asp:Button runat="server" ID="firstButton" Text="V1" ValidationGroup="firstGroup" /></td>
            <td>
                <asp:Button runat="server" ID="secondButton" Text="V2" ValidationGroup="secondGroup" /></td>
        </tr>
    </table>

    <asp:ValidationSummary ID="firstSummary" runat="server" ValidationGroup="firstGroup" />
    <asp:ValidationSummary ID="secondSummary" runat="server" ValidationGroup="secondGroup" />
</asp:Panel>

【讨论】:

  • 谢谢!这似乎确实有帮助。我还发现,如果所有验证器都是 CustomValidators 而不是使用内置的RequiredFieldValidators,它们将按预期运行(尽管这可能不是最好的解决方法)。值得注意的是,文本没有出现在使用 EnableClientScript="false" 方法的验证字段中,但这可能是我最终所做的;至少,这会使默认按钮再次工作。非常感谢!
猜你喜欢
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 2019-08-20
  • 2022-11-28
  • 2022-11-07
  • 2010-11-02
相关资源
最近更新 更多