2017-04-11 51 views
0

我有requiredFieldValidator用于面板内的下拉列表。如果在下拉列表中没有选择任何数据,则btnSubmitReport可以正常工作以验证并显示*。一旦数据被选中并且点击btnSubmitReport来显示数据,它仍然可以正常工作。现在,如果您取消选择下拉菜单并点击btnSubmitReport,则不再进行验证。这是因为第一次单击btnSubmitReport_Click时,它会检查是否Page.IsValid并调用JavaScript代码,但随后的调用只是调用JavaScript代码,并且未调用btnSubmitReport_Click来查看页面是否为Valid。请建议。这里是aspx页面上示例代码:页面验证无法通过JavaScript代码运行

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="testValidator.aspx.cs" 
    MasterPageFile="~/Site.master" Inherits="textXslt.testValidator" %> 
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript"></script> 
</asp:Content> 
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
    <script src="Styles/Reports.js" type="text/javascript"></script> 
    <h3> 
     <asp:Label ID="lblHeader" runat="server" Text="Reporting Filter"></asp:Label> 
    </h3> 
    <div style="text-align: right"> 
     <input id="lnkShowFilter" type="button" value="Show Filter" onclick="ShowF()" class="btn" /> 
     <input id="lnkHideFilter" type="button" value="Hide Filter" onclick="HideF()" class="btn" /> 
    </div> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <div id="divFilter"> 
     <asp:UpdatePanel ID="uplMain" runat="server"> 
      <ContentTemplate> 
       <asp:PlaceHolder ID="PlaceHolder1" runat="server"> 
        <table> 
         <tr> 
          <td valign="top"> 
           <table> 
            <tr> 
             <td> 
              <asp:CheckBox ID="chkBusiness" runat="server" Text="Business Division" CssClass="chkbox" /> 
             </td> 
             <td> 
              <asp:DropDownList ID="ddlBusiness" runat="server" AppendDataBoundItems="true" AutoPostBack="true" 
               CausesValidation="True" OnSelectedIndexChanged="ddlBusiness_SelectedIndexChanged" 
               ValidationGroup="grpSubmit" Width="350px"> 
               <asp:ListItem Selected="True" Value="-1">--- SELECT ---</asp:ListItem> 
               <asp:ListItem>Orange</asp:ListItem> 
               <asp:ListItem>Apple</asp:ListItem> 
               <asp:ListItem>Mango</asp:ListItem> 
              </asp:DropDownList> 
              </asp:DropDownList> 
              <asp:RequiredFieldValidator ID="rfvBusiness" runat="server" ControlToValidate="ddlBusiness" 
               Enabled="true" ToolTip="Please select a Business." ErrorMessage="*" InitialValue="-1" 
               ForeColor="Red" CssClass="required" Display="Dynamic" ValidationGroup="grpSubmit"> 
              </asp:RequiredFieldValidator> 
             </td> 
            </tr> 
           </table> 
          </td> 
         </tr> 
        </table> 
       </asp:PlaceHolder> 
       <hr size="1" /> 
       <div style="text-align: center"> 
        <table style="width: 10%"> 
         <tr> 
          <td> 
           <asp:Button ID="btnHome" runat="server" Text="Home" OnClick="btnHome_Click" CssClass="btn" /> 
          </td> 
          <td> 
           <asp:Button ID="btnSubmitReport" runat="server" Text="Submit" OnClick="btnSubmitReport_Click" 
            ValidationGroup="grpSubmit" CssClass="btn" /> 
          </td> 
         </tr> 
        </table> 
       </div> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 
    <div id="divResult"> 
     <asp:UpdatePanel ID="uplGrid" runat="server"> 
      <ContentTemplate> 
       Here go Results of grid 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 
</asp:Content> 

这里被后面的代码:

protected void btnSubmitReport_Click(object sender, EventArgs e) 
    { 
     if (Page.IsValid) 
     { 
      btnSubmitReport.Attributes["onclick"] = "javascript:SubmitF();"; 
     } 
     //then do rest of the processing to display grid results 
    } 

这里是Reports.js文件:

function ShowF() { 
    $('#lnkShowFilter').hide(); 
    $('#divFilter').show(); 
    $('#lnkHideFilter').show(); 
    $('#divResult').hide(); 
    $('#MainContent_lblHeader').text("Reporting Filter"); 
} 

function HideF() { 
    $('#lnkShowFilter').show(); 
    $('#divFilter').hide(); 
    $('#lnkHideFilter').hide(); 
    $('#divResult').show(); 
    $('#').show(); 
    $('#MainContent_lblHeader').text("Report Result"); 
} 

function SubmitF() { 
    // alert("SubmitF"); 
    $('#lnkShowFilter').show(); 
    $('#divFilter').hide(); 
    $('#lnkHideFilter').hide(); 
    $('#divResult').show(); 
    $('#MainContent_lblHeader').text("Report Result"); 
} 
+0

检查'Page.IsValid'才有意义,如果你有一个 “的CausesValidation” 方案 - 提交表单的按钮的'CausesValidation'属性设置为True。这会自动调用'Page.Validate',并检查属于同一ValidationGroup的所有Validation控件的有效性。 – Webruster

+0

@Webruster,如果我没有检查'if(Page.IsValid)',那么即使页面验证发生并且(*)符号出现,但SubmitF被调用并且divFilter隐藏并且divResult显示我们想要停止除非页面有效。我们如何实现这一目标? – SilverFish

+0

你在那里得到了一个巨大的需求.. – Webruster

回答

0

好,我能通过使用客户端验证来解决问题。所以,我创建了一个功能

<script type="text/javascript"> 
     function ValidateAndShowPopup() { 
      if (Page_ClientValidate('grpSubmit')) { 
       SubmitF(); 
      } 
     } 

而且加入这两个和的OnClientClick的OnClick的提交按钮

<asp:Button ID="btnSubmitReport" runat="server" Text="Submit" OnClick="btnSubmitReport_Click" ValidationGroup="grpSubmit" OnClientClick="ValidateAndShowPopup()" CssClass="btn" />