2016-09-01 11 views
1

유효성 검사 컨트롤 (예 : RequiredFieldValidator)을 사용할 때 ASP.NET에서 클라이언트 측 프레임 워크는 JS 기능 Page_ClientValidate을 실행합니다. 이 함수는 (주어진 ValidationGroup) 페이지의 모든 컨트롤의 유효성을 검사하고 validator 컨트롤의 span 태그의 DOM 요소의 매개 변수로 JS 함수 ValidatorUpdateDisplay을 호출합니다.첫 번째로 UpdatePanel에서 컨트롤/유효성 검사기가 포스트 백에로드 될 때 사용자 정의 ValidatorUpdateDisplay 함수를 사용하는 방법은 무엇입니까?

ValidatorUpdateDisplay은 유효성 검사 결과에 따라 span 태그의 가시성을 토글합니다.

웹 응용 프로그램에서 ValidatorUpdateDisplay JS 함수를 오버라이드하여 유효성 검사 시나리오에서 더 많은 기능을 제공합니다 (예 : 컨트롤 주위의 빨간색 테두리, 실패한 첫 번째 컨트롤의 팝업 표시 및 스크롤).

이제는 UpdatePanel에서 포스트 백 이후에 내 컨트롤 (제출 버튼 포함)이 처음 표시 될 때까지 잘 작동합니다. 초기로드를 눌러 bShow

<asp:ScriptManager runat="server" /> 
<asp:UpdatePanel ID="upTest" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Button ID="bShow" runat="server" UseSubmitBehavior="false" Text="SHOW" OnClick="bShow_Click" /> 
     <asp:Panel ID="pContent" runat="server" Visible="false"> 
      <asp:TextBox ID="tbTest" runat="server" /> 
      <asp:RequiredFieldValidator ID="rfvTest" runat="server" ControlToValidate="tbTest" Text="Not valid" /> 
      <asp:Button ID="bTest" runat="server" UseSubmitBehavior="false" Text="TEST" /> 
     </asp:Panel> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<script type="text/javascript"> 
    function ValidatorUpdateDisplay(val) { 
     debugger; // this will not be reached 
    } 
</script> 

protected void bShow_Click(object sender, EventArgs e) 
{ 
    this.pContent.Visible = true; 
} 

pContent를 표시합니다. 이제 tbTest.Text을 비워두고 bTest을 누르면 재정의 된 ValidatorUpdateDisplay 기능을 입력해야하지만 프레임 워크의 기능에 들어가고 rfvTest에서 "유효하지 않음"을 표시합니다.

당신이 truepContent.Visible을 변경하고 원하는 효과가 일어날 초기로드 후 bTest을 누르면 : 그것은 사용자 정의 ValidatorUpdateDisplay 기능을 입력하고 "유효하지 않습니다"표시되지 않습니다.

bTest 단추를 UpdatePanel 밖으로 이동해도 문제가 지속됩니다.

UpdatePanel에서 어떻게 작동합니까?

답변

1

ASP.NET은 처음으로 필요할 때 ValidatorUpdateDisplay 함수를 삽입하기 위해 지연로드 방식을 사용합니다. 따라서 예제에서 UpdatePanel의 포스트 백 이후 함수를로드합니다.

이것은 내 마지막으로 함수를 삽입하기 때문에 ValidatorUpdateDisplay 함수의 구현을 재정의합니다. 나는 청소기 해결책이 있었으면 좋겠어

<asp:CustomValidator runat="server" /> 

:

은 더러운 해결 방법은, 그냥 항상 유효 초기로드의 빈 CustomValidator을 삽입했다.