【问题标题】:Conflicting OnClientClick event and RequiredFieldValidatorOnClientClick 事件和RequiredFieldValidator 冲突
【发布时间】:2014-01-07 22:33:02
【问题描述】:

在以下代码中,我在插入和更新事件中使用了 requiredfieldvalidator 以及 onclientclick 确认事件。

如果 requiredfieldvalidator 不满足,验证器正确地阻止更新或插入发生。但是,onclientclick 确认事件仍然会触发,因为按钮仍然是可点击的。有什么方法可以阻止 onclientclick 确认事件在 requiredfieldvalidator 得到满足之前触发,或者在 requiredfieldvalidator 得到满足之前禁用插入/更新链接?

我更喜欢非 javascript/jquery 解决方案,但如果没有其他方法,我愿意接受。

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
                DataSourceID="ObjectDataSource2" CssClass="detail" 
                    OnItemInserted="UpdateGrid" CaptionAlign="Left">
                <Fields>
                    <asp:TemplateField HeaderText="APP" SortExpression="APP">
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("APP") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <InsertItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("APP") %>'></asp:TextBox>
                            &nbsp;
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                                ControlToValidate="TextBox1" 
                                ErrorMessage="New applications must have an App_Tag"></asp:RequiredFieldValidator>
                        </InsertItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Bind("APP") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>


                    <asp:TemplateField ShowHeader="False">
                        <EditItemTemplate>
                            <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" 
                                CommandName="Update" Visible='<%# ShowEditButton() %>' OnClientClick="if (!confirm('Are you sure you want update?')) return false;" Text="Update"></asp:LinkButton>
                            <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
                                CommandName="Cancel" Text="Cancel"></asp:LinkButton>
                        </EditItemTemplate>
                        <InsertItemTemplate>
                            <asp:LinkButton ID="LinkButton9" runat="server" CausesValidation="False" 
                                CommandName="Insert" ValidationGroup="group1" Visible='<%# ShowEditButton() %>' OnClientClick="if (!confirm('Are you sure you want insert?')) return false;" Text="Insert"></asp:LinkButton>
                             <asp:LinkButton ID="LinkButton10" runat="server" 
                                CommandName="Cancel" OnClick="HidePopUp" Text="Cancel"></asp:LinkButton>
                        </InsertItemTemplate>
                        <ItemTemplate>
                            <asp:LinkButton ID="LinkButton4" runat="server" CausesValidation="False" 
                                CommandName="Edit" OnClick="EditMode" Text="Edit" Visible='<%# ShowEditButton() %>' ></asp:LinkButton>
                            <asp:LinkButton ID="LinkButton10" runat="server" CausesValidation="False" 
                                CommandName="Cancel" OnClick="HidePopUp" Text="Close"></asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Fields>
            </asp:DetailsView> 

【问题讨论】:

    标签: asp.net webforms detailsview requiredfieldvalidator


    【解决方案1】:

    您可能会考虑完全放弃 RequiredFieldValidator 并在 OnClientClick 中处理验证和确认对话框(在 OnClientClick 中调用 JavaScript 函数而不是内联处理它)。我知道这是一个 JavaScript 解决方案,但它可能是最简单的方法。

    【讨论】:

    • 感谢您的评论。我找不到任何其他方法,所以我正在研究您建议的 Javascript 解决方案。
    • 你仍然需要验证服务器端,以防有人禁用 JavaScript。
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多