ASP.NET 유효성 검사기를 사용하여 확인란과 텍스트 상자를 비교하는 우아한 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/88361

  •  01-07-2019
  •  | 
  •  

문제

텍스트 상자와 확인란이 포함된 Asp.Net 리피터가 있습니다.확인란을 선택하면 텍스트 상자가 0 또는 공백 값만 허용하는지 확인하는 클라이언트측 유효성 검사를 추가해야 합니다.

이를 수행하고 클라이언트 측 오류에 대한 일관된 표시를 제공하기 위해 Asp.Net의 유효성 검사기 컨트롤 중 하나 이상을 사용하고 싶습니다(서버 측 오류는 다른 하위 시스템에서 처리됨).

Asp:CompareValidator는 이러한 종류의 복잡한 비교를 수행할 만큼 유연하지 않은 것 같으므로 Asp:CustomValidator를 살펴보겠습니다.

내가 겪고 있는 문제는 사용자 정의 정보를 유효성 검사 함수에 전달할 방법이 없는 것 같다는 것입니다.이는 확인란과 텍스트 상자의 ClientId가 런타임 시(반복기의 일부이기 때문에) 알 수 없기 때문에 문제가 됩니다.

그래서...내 옵션은 다음과 같습니다.

  1. 어떻게든 CustomValidator에 텍스트 상자와 확인란을 전달합니다(가능한 것 같지 않음).
  2. CustomValidator에서 전달된 인수를 기반으로 JavaScript를 통해 TextBox를 찾습니다.이것이 가능합니까? ClientId가 모호하면 어떻게 되나요?
  3. 유효성 검사를 완전히 잊어버리고 사용자 정의 JavaScript를 내보냅니다(두 ClientId를 사용자 정의 함수에 전달할 수 있음).

이를 구현하는 더 좋은 방법에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

가장 좋은 방법은 새 클래스에서 BaseValidator를 상속하고 해당 ID를 컨트롤에 속성으로 전달하는 것입니다.런타임 시 생성되는 전체 클라이언트 측 ID를 몰라도 유효성 검사기 내에서 ID를 확인할 수 있어야 합니다.먼저 서버에서 유효성을 검사하는 데이터를 가져와야 하고 두 번째로 클라이언트에서 데이터를 가져와야 합니다.

다른 팁

CustomValidator를 중계기 안에 넣을 수 없나요?그렇지 않은 경우 리피터가 바인딩되고 사용자 FindControl()이 있을 때 동적으로 생성할 수 있습니다.

protected MyDataBound(object sender, RepeaterItemEventArgs e) {
  (CheckBox)cb = (CheckBox)e.Item.FindControl("myCheckboxName");
  (TextBox)tb = (TextBox)e.Item.FindControl("myTextBox");
}

...또는 그런 것.나는 머리 꼭대기에서 코드를 작성했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top