2009-09-09 3 views
1

I있어 GRIDVIEW 해고되지ASP.Net 직접 CustomValidator이 EditTemplate와 함께 UpdatePanel에

Protected Sub valDistFromTo_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) 
    Dim cv As CustomValidator = CType(source, CustomValidator) 
    Dim gvr As GridViewRow = cv.NamingContainer 
    Dim tbV As UI.WebControls.TextBox = gvr.FindControl("txtDistFrom") 
    If tbV.Text <> "" Then 
     args.IsValid = False 
     cv.ErrorMessage = "inhalt ist " & tbV.Text 
    End If 
End Sub 

그러나이 코드를 디버깅 할 때 서버 측 함수는 무엇이든 해고되지 않습니다. Gridview와 관련이있는 것 같습니다. 따라서 ID로 컨트롤에 직접 액세스 할 수 없습니다. 어떤 제안?

+0

페이지를 포스트 백에 적용합니까? – Jambobond

+0

예, 그렇습니다. 그러나 Jan이 이미 설명한 것처럼 컨트롤 ID에 문제가 있습니다. 그러나 CustomValidators를 프로그래밍 방식으로 어떻게 추가합니까? – Ulli

답변

1

를 사용 RowCreated 또는 RowDatabound에 직접 CustomValidator를 추가하려고 할 것입니다. args.Value를 사용하고 있습니다. TextBox ID로 설정된 ControlToValidate가있는 EditTemplates 내에서 CustomValidators 및 TextBox를 항상 사용하며 작동합니다. TextBox 객체를 사용하려는 방식대로 가져올 수 없습니다. 위의 제안처럼 RowUpdating 이벤트를 사용하는 것보다 훨씬 덜 고통스럽고 훨씬 더 깨끗하다고 ​​생각합니다.

+0

고마워, 그게 너무 작동합니다. 처음에는 footeremplate에서이 메서드를 사용하여 문제가 발생했습니다. 그러나 Handler 메서드에서 Page.Validate 메서드를 업데이트하고 삽입하는 것이 중요합니다. – Ulli

0

텍스트 상자의 ID가 GridView, ListView 및 Repeater와 같은 반복 요소에 사용되지 않기 때문에이 문제는 ControlToValidate 속성과 관련이 있습니다. 즉, ASP.NET 엔진의 한계를 발견했습니다.

이 문제를 해결하는 방법을 잘 모르겠습니다. GridView의 OnRowBound 메서드에 메서드를 연결하여 CustomValidator를 프로그래밍 방식으로 추가하면됩니다.

이 문서는 대답을 제공 할 수도 있습니다.이 문서는 대답을 제공 할 수 있습니다 : Integrating Asp.Net Validation Controls with GridView at run-time.

+0

이것이 맞다면, 나는 gridview에서 유효성 검사 컨트롤을 전혀 사용할 수 없습니다. 다른 유형, 즉 RangeValidator도 ControlToValidate 속성을 가지며 작동합니다. – Ulli

1

이 경우 필수 필드 유효성 검사기를 사용할 수 있습니다. 어떤 그리드에서 잘 작동합니다.

서버 쪽 유효성 검사의 경우 사용자 지정 유효성 검사기를 표 밖으로 완전히 이동하고 ControlToValidate 속성을 비워 둡니다. 유효성 검사를 그리드의 RowUpdating 이벤트로 이동하고 사용자 정의 유효성 검사기에서 오류 메시지를 설정할 수 있습니다. 유효성 검사기 IsValid 속성을 적절히 설정합니다.

+0

감사합니다, 그 또한 Gridview 내부 controlValidator 함께 일했다. – Ulli

0

나는 또한 ControlToValidate가 문제라고 생각하는 경향이 있습니다. .NET은 런타임에 해당 컨트롤의 ID를 변경하고 사용자 지정 유효성 검사기는 아마도이 컨트롤을 선택하지 않을 것입니다.

Protected Sub valDistFromTo_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) 
     Dim cv As CustomValidator = CType(source, CustomValidator) 
     If args.Value <> "" Then 
      args.IsValid = False 
      cv.ErrorMessage = "inhalt ist " & args.Value 
     End If 
End Sub 

그것은 작동합니다 : 당신이 당신의 VB를 수정하는 경우

는 I의 FindControl()

0

나는 동일한 문제가있었습니다. 내 customvalidator에서이 속성을 명시 적으로 설정하면 서버 측 코드가 실행됩니다.

EnableClientScript="false"