2017-04-11 60 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" />