OnClientClick事件和RequiredFieldValidator冲突



在下面的代码中,我在插入和更新事件中使用了一个requiredfieldvalidator和一个onclientclick confirm事件。

如果不满足所需的字段验证器,则验证器会正确地阻止更新或插入的发生。但是,onclientclick confirm事件仍然会触发,因为该按钮仍然是可单击的。是否有任何方法可以防止onclientclick confirm事件在满足所需字段验证器之前触发,或者在满足所要求字段验证器之前禁用插入/更新链接?

我更喜欢非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> 

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

最新更新