为什么我的表单会回发,尽管有“必填字段验证不匹配”?

发布于 2024-12-17 12:14:39 字数 2773 浏览 3 评论 0原文

问:

我的页面上有一个 RequiredFieldValidator ,当我单击(回发触发)按钮时,它会进行回发,尽管该字段未输入必填项! 这种行为的原因是什么?

我的.aspx:

                       <asp:UpdatePanel ID="UpdatePanel2" runat="server">
                            <Triggers>
                                <asp:PostBackTrigger ControlID="btn_Search" />
                            </Triggers>
                            <ContentTemplate>
                                <asp:ImageButton ID="btn_Search" runat="server" ImageUrl="~/Images/save.png" 
                                    OnClick="btn_Search_Click" OnClientClick="return postbackButtonClick();" />
                            </ContentTemplate>
                        </asp:UpdatePanel>

                     <asp:DropDownList ID="ddl_department" runat="server" Width="200px" OnSelectedIndexChanged="ddl_department_SelectedIndexChanged"
                            AutoPostBack="True">
                        </asp:DropDownList>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="ddl_department"
                            Display="Dynamic" ErrorMessage="*" InitialValue="-1"></asp:RequiredFieldValidator>

                        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                            <ContentTemplate>
                                <asp:DropDownList ID="ddl_study" runat="server" Width="200px">
                                </asp:DropDownList>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="ddl_study"
                                    Display="Dynamic" ErrorMessage="*" InitialValue="-1"></asp:RequiredFieldValidator>
                            </ContentTemplate>
                            <Triggers>
                                <asp:AsyncPostBackTrigger ControlID="ddl_department" EventName="SelectedIndexChanged" />
                            </Triggers>
                        </asp:UpdatePanel>

                        <script type="text/javascript">
                            var updateProgress = null;
                            function postbackButtonClick() {
                                updateProgress = $find("<%= UpdateProgress1.ClientID %>");
                                window.setTimeout("updateProgress.set_visible(true)", updateProgress.get_displayAfter());
                                return true;
                            }
                        </script>

Q:

I have a RequiredFieldValidator on my page ,when i click the button which is (postback triggered) it makes the postback, although the field which is required wasn't entered !
What's the reason to this behavior?

My .aspx:

                       <asp:UpdatePanel ID="UpdatePanel2" runat="server">
                            <Triggers>
                                <asp:PostBackTrigger ControlID="btn_Search" />
                            </Triggers>
                            <ContentTemplate>
                                <asp:ImageButton ID="btn_Search" runat="server" ImageUrl="~/Images/save.png" 
                                    OnClick="btn_Search_Click" OnClientClick="return postbackButtonClick();" />
                            </ContentTemplate>
                        </asp:UpdatePanel>

                     <asp:DropDownList ID="ddl_department" runat="server" Width="200px" OnSelectedIndexChanged="ddl_department_SelectedIndexChanged"
                            AutoPostBack="True">
                        </asp:DropDownList>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="ddl_department"
                            Display="Dynamic" ErrorMessage="*" InitialValue="-1"></asp:RequiredFieldValidator>

                        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                            <ContentTemplate>
                                <asp:DropDownList ID="ddl_study" runat="server" Width="200px">
                                </asp:DropDownList>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="ddl_study"
                                    Display="Dynamic" ErrorMessage="*" InitialValue="-1"></asp:RequiredFieldValidator>
                            </ContentTemplate>
                            <Triggers>
                                <asp:AsyncPostBackTrigger ControlID="ddl_department" EventName="SelectedIndexChanged" />
                            </Triggers>
                        </asp:UpdatePanel>

                        <script type="text/javascript">
                            var updateProgress = null;
                            function postbackButtonClick() {
                                updateProgress = $find("<%= UpdateProgress1.ClientID %>");
                                window.setTimeout("updateProgress.set_visible(true)", updateProgress.get_displayAfter());
                                return true;
                            }
                        </script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烈酒灼喉 2024-12-24 12:14:39

从 LinkBut​​ton 的 OnClientClick 属性值中删除 return 子句:OnClientClick="postbackButtonClick()" 并重写 postbackButtonClick 如下:

function postbackButtonClick() {
     Page_ClientValidate();

     if (Page_IsValid) {
          updateProgress = $find("<%= UpdateProgress1.ClientID %>");
          window.setTimeout("updateProgress.set_visible(true)", updateProgress.get_displayAfter());
          return true;
     }
}

Remove return clause from LinkButton's OnClientClick property value: OnClientClick="postbackButtonClick()" and rewrite postbackButtonClick as below:

function postbackButtonClick() {
     Page_ClientValidate();

     if (Page_IsValid) {
          updateProgress = $find("<%= UpdateProgress1.ClientID %>");
          window.setTimeout("updateProgress.set_visible(true)", updateProgress.get_displayAfter());
          return true;
     }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文