【问题标题】:Implementing two contact forms with validation controls in a single page in ASP.NET?在 ASP.NET 的单个页面中实现两个带有验证控件的联系表单?
【发布时间】:2016-01-15 16:46:53
【问题描述】:

我在同一个 aspx 页面中使用了两个联系表单,一个有 4 个文本框控件(名称-电子邮件-主题-正文)和发送按钮控件。 第二个表单有2个文本框控件和发送按钮,所有(除了第二个表单的第二个文本框)都有验证控件(requiredFieldValidator)。

这是第一个按钮点击事件中的代码:

  protected void ButtonSend_Click(object sender, EventArgs e)
    {
        if(Page.IsValid)
        {
            LabelIRespond.Visible = true;
            .....
        }
    } 

第二个按钮点击事件中没有代码。 问题是,当第一个表单验证成功而第二个表单未验证时,点击事件中的代码未执行。并出现第二种形式的错误信息。他们表现得好像他们是一种形式!

两种形式的标记:

<section id="sendSection">   
    <div id="contactMe">
        <h1>Contact me</h1>
    </div>
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>

    <h4>Send me a message:</h4>
    <table class="auto-style1">
        <tr>
            <td class="auto-style8">
                <asp:TextBox ID="TextBoxEmail" placeholder="Your Email address" runat="server" BackColor="#D4D8DF"  Font-Names="Century Gothic" CssClass="txtbxs" Height="25px" Width="250px"></asp:TextBox>
            </td>
            <td>
                <asp:RequiredFieldValidator ID="RequiredFieldValidatorEmail" runat="server" ControlToValidate="TextBoxEmail" CssClass="ErrorMessage" Display="Dynamic" ErrorMessage="Please enter your Email address">*</asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBoxEmail" CssClass="ErrorMessage" Display="Dynamic" ErrorMessage="RegularExpressionValidator" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">*</asp:RegularExpressionValidator>
            </td>
        </tr>
        <tr>
            <td class="auto-style8">
                <asp:TextBox ID="TextBoxName" placeholder="Your name" runat="server" BackColor="#D4D8DF" Font-Names="Century Gothic" CssClass="txtbxs" Height="25px" Width="250px"></asp:TextBox>
            </td>
            <td>
                <asp:RequiredFieldValidator ID="RequiredFieldValidatorName" runat="server" ControlToValidate="TextBoxName" CssClass="ErrorMessage" Display="Dynamic" ErrorMessage="RequiredFieldValidator">*</asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td class="auto-style5">
                <asp:TextBox ID="TextBoxSubject" placeholder="Subject" runat="server" BackColor="#D4D8DF" Font-Names="Century Gothic" CssClass="txtbxs" Height="25px" Width="250px"></asp:TextBox>
            </td>
            <td class="auto-style3">
                <asp:RequiredFieldValidator ID="RequiredFieldValidatorSubject" runat="server" ControlToValidate="TextBoxSubject" CssClass="ErrorMessage" Display="Dynamic" ErrorMessage="RequiredFieldValidator">*</asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td class="auto-style6">
                <asp:TextBox ID="TextBoxBody" placeholder="What do you want to tell me?"  runat="server" BackColor="#D4D8DF" TextMode="MultiLine" Font-Names="Century Gothic" CssClass="txtbxs" Height="180px" Width="370px"></asp:TextBox>
            </td>
            <td class="auto-style2">
                <asp:RequiredFieldValidator ID="RequiredFieldValidatorBody" runat="server" ControlToValidate="TextBoxBody" CssClass="ErrorMessage" Display="Dynamic" ErrorMessage="Type your message">*</asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td class="auto-style8">
                <asp:Button ID="ButtonSend" runat="server" Text="Send" CssClass="btnSend" Width="80px" OnClick="ButtonSend_Click" UseSubmitBehavior="False" Font-Names="Century Gothic" />
            </td>
            <td>
                &nbsp;</td>
        </tr>
        <tr>
            <td class="auto-style8">
                <asp:Label ID="LabelIRespond" runat="server" Text="Thanks, your message has been sent. I'll respond ASAP." Visible="False"></asp:Label>
            </td>
            <td>
                &nbsp;</td>
        </tr>
    </table>
                        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
        <ProgressTemplate>
            <div class="wait">
            </div>
        </ProgressTemplate>
    </asp:UpdateProgress>

</section>                 
<div class="split"></div>

<section id="viewCVSection">
    <div id="check">
        <h1>Check out my CV</h1>
    </div>



    <div class="cvForm">
<table class="auto-style1">
    <tr>
        <td class="auto-style4">
            <asp:TextBox ID="TextBoxEmail2" placeholder="Company Email address" CssClass="txtbxs" runat="server" BackColor="#D4D8DF" Height="25px" Width="250px" Font-Names="Century Gothic"></asp:TextBox>
        </td>
        <td>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBoxEmail2" CssClass="ErrorMessage" Display="Dynamic" ErrorMessage="RequiredFieldValidator">*</asp:RequiredFieldValidator>
            <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ControlToValidate="TextBoxEmail2" CssClass="ErrorMessage" Display="Dynamic" ErrorMessage="RegularExpressionValidator" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">*</asp:RegularExpressionValidator>
        </td>
    </tr>
    <tr>
        <td class="auto-style4">
            <asp:TextBox ID="TextBoxCompany" placeholder="Company name" CssClass="txtbxs" runat="server" BackColor="#D4D8DF" Height="25px" Width="250px" Font-Names="Century Gothic"></asp:TextBox>
        </td>
        <td>&nbsp;</td>
    </tr>
    <tr>
        <td class="auto-style4">
            <asp:Button ID="Button1" CssClass="sendCV" runat="server" Text="Request CV" Font-Names="Century Gothic" OnClick="Button1_Click" />
        </td>
        <td>&nbsp;</td>
    </tr>
</table>

    </div>
    </section>

【问题讨论】:

  • 您需要使用我的回答中提到的 ValidationGroup 。将第一个联系表单按钮及其验证器的 ValidationGroup 设置为 FirstGroup,然后将第二个联系表单按钮和验证器的相同属性设置为 SecondGroup。然后就可以了。
  • 另外ButtonSend1在哪个联系表中?
  • 第一种形式。我已经编辑了我的问题,现在它包含两种形式的标记
  • 你能按照我在回答中所说的话吗?

标签: c# asp.net validation


【解决方案1】:

您需要使用正确的按钮连接验证控件。现在,第一个表单中的按钮单击导致第一个联系表单和第二个联系表单中的验证,这导致 Page.IsValid 为 false,因为第二个表单字段为空,因此无效。

因此,将第一个联系表单的验证组设置为不同于第二个联系表单的验证组,如下面的代码所示。然后在相应的验证控件上设置ValidationGroup 相同的值。

<asp:Button ID="ButtonSend" runat="server" Text="Send" CssClass="btnSend"
 Width="80px" OnClick="ButtonSend_Click" UseSubmitBehavior="False" 
   Font-Names="Century Gothic" ValidationGroup="FirstGroup"/>



<asp:Button ID="Button1" CssClass="sendCV" runat="server" 
 Text="Request CV" Font-Names="Century Gothic" OnClick="Button1_Click" 
  ValidationGroup="SecondGroup"/>

注意:在进行上述代码更改后,确保所有验证控件的ValidationGroup 也设置为适当的值。

【讨论】:

  • 此validationGroup 属性必须设置为验证控件及其相应的按钮?我应该为文本框控件设置属性吗?
  • 不适用于文本框。只需在所有验证器控件和按钮上设置 ValidationGroup
猜你喜欢
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
相关资源
最近更新 更多