Почему моя форма делает постбэк, хотя обязательное поле не проверено? - PullRequest
1 голос
/ 22 ноября 2011

Q:

У меня есть RequiredFieldValidator на моей странице, когда я нажимаю кнопку (postback triggered), она делает postback, хотя поле, которое требуется, не было введено!В чем причина такого поведения?

Мой .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>

1 Ответ

1 голос
/ 22 ноября 2011

Удалить предложение возврата из значения свойства OnClientClick LinkButton: 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;
     }
}
...