2014-01-07 63 views
0

在下面的代码中,我在插入和更新事件时使用了requiredfieldvalidator以及onclientclick confirm事件。冲突OnClientClick事件和RequiredFieldValidator

如果requiredfieldvalidator不满足,验证程序会正确阻止更新或插入的发生。但是,由于按钮仍然可点击,onclientclick确认事件仍会触发。有没有办法阻止onclientclick confirm事件发生,直到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> 

回答

0

你可以看看完全抛弃了的RequiredFieldValidator和处理都验证和OnClientClick您的确认对话框(调用的OnClientClick一个JavaScript函数,而不是内嵌处理它)。我知道这是一个JavaScript解决方案,但它可能是最简单的方法。

+0

感谢您的评论。我找不到任何其他的方式来做到这一点,所以我正在研究你建议的Javascript解决方案。 – TimidObserver

+0

您仍然必须验证服务器端,以免某人禁用JavaScript。 – sh1rts