Question

Thank you very much for taking the time to read this. I have an issue in which I was setting a default button for an ASP.NET page on page load from code behind, but now that I have multiple validation groups targeting one control, that is no longer working. Now, when I hit enter while in that control (textbox), validation for both groups are triggered minus the validation summary text.

Here is my examplefied code:

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

If I use this and hit 'Enter' while inside of the textbox without typing anything into it, then neither of the validation summaries will appear but I will have two asterisks next to the textbox (one for each group). If the user presses 'Enter' I would expect a full validation using only the first group which is supposed to be assigned to the DefaultButton (here, 'firstButton'). Is there any way to achieve this functionality and initiate the client-side validation that would have happened had the user clicked 'firstButton' instead?

I have also tried wrapping the whole table plus the validation summaries inside of an asp:Panel and setting the DefaultButton there, but I received the same results. Any help or pointers in the right direction would be greatly appreciated!

Was it helpful?

Solution

Set

EnableClientScript="false"

in RequiredFieldValidator control. It will help.

<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>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top