2017-04-11 4 views
0

패널 내 드롭 다운 목록에 requiredFieldValidator가 있습니다. 드롭 다운에서 데이터를 선택하지 않으면 btnSubmitReport가 유효하게 작동하고 * 표시됩니다. 데이터를 선택하고 btnSubmitReport를 클릭하여 데이터를 표시하면 여전히 정상적으로 작동합니다. 이제 드롭 다운을 선택 취소하고 btnSubmitReport를 누르면 더 이상 유효성 검사를 수행하지 않습니다. 이것은 처음 btnSubmitReport_Click을 클릭했기 때문에 Page.IsValid가 호출되는지 확인하고 JavaScript 코드를 호출하지만 후속 호출은 JavaScript 코드를 호출하기 만하고 btnSubmitReport_Click은 페이지가 유효한지 확인하기 위해 호출되지 않기 때문입니다. 제발 제안 해주세요. 여기자바 스크립트 코드로 페이지 유효성 검사가 작동하지 않습니다.

<%@ 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

에 OnclientClick과의 OnClick 모두 추가 - 폼을 제출 한 버튼의 'CausesValidation' 속성은 True로 설정되어 있습니다. 이것은 자동으로'Page.Validate'를 호출 할 것이고, 같은 ValidationGroup에 속하는 모든 Validation 컨트롤은 유효성을 검사 할 것입니다. – Webruster

+0

@Webruster, 'if (Page.IsValid)'를 체크하지 않으면 페이지 유효성 검사가 일어나고 순간적으로 (*) 표시가 나타나지만 SubmitF가 호출되고 divFilter가 숨기고 divResult가 멈추고 자하는 경우에도 페이지가 유효하지 않은 한. 우리는 어떻게 그것을 성취 할 수 있습니까? – SilverFish

+0

당신은 거기에 거대한 requriement 있어요. – Webruster

답변

0

, 나는 할 수 있었다 클라이언트 측 유효성 검사를 사용하여 문제를 해결할 수 있습니다. 그래서 함수

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

를 작성 제출 버튼 당신이 "CausesValidation"시나리오가있는 경우 Page.IsValid`은 의미가 '확인

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