2010-02-09 4 views
0

텍스트 상자가 3 열인 gridview가 있습니다. 그것은 필요한만큼의 행을 가질 수 있지만 일반적으로 약 5 행만 있습니다. 각 행의 유효성을 검사해야합니다.사용자 지정 유효성 검사기의 컨트롤 이름 .NET 클라이언트 쪽 유효성 검사

두 개의 열을 합계하여 세 번째 열과 비교하여 사용자가 올바르게 데이터를 입력했는지 확인하는 클라이언트 측 검사기를 만들려고합니다.

궁금한 점이 있으시면 연산자는 앞의 두 열을 코드 뒤에 함께 합산하는 대신 세 번째 열을 입력해야한다는 스펙의 일부입니다. 이것은 작업자가 정보를 올바르게 전사하고 있는지 확인하기 위해 수행됩니다.

이 클라이언트 측 유효성 검사를 만들려면 .net에서 사용자 지정 유효성 검사기를 사용하려고합니다. 하지만 세 개의 텍스트 상자의 이름을 전달하는 방법을 찾을 수 없습니다. ControlToValidate 매개 변수를 사용하여 대상 컨트롤 이름을 지정할 수 있지만 다른 두 컨트롤 ID를 전달하는 방법은 무엇입니까?

나는 이것을하기위한 '적절한'방법을 찾고 있는데, 한가지 생각은 controltovalidate의 이름으로 참조 된 자바 스크립트로 배열을 만드는 것이다.

DC

답변

0

나는이 문제를 해결했다. 우아한 솔루션은 아니지만 작동합니다.

먼저 나는

function CheckRow(sender,args) { 
// get the name of the control to validate 
try { 
    args.IsValid = true; 
    ctv = sender.controltovalidate; 

// get the data from the other controls 
    nt = document.getElementById(ctv.replace('_Total','_NonTicket')); 
    t = document.getElementById(ctv.replace('_Total','_Ticket')); 

    if (nt && t) { 
     v1 = Number(nt.value); 
     v2 = Number(t.value); 
     v3 = Number(args.Value); 
     if ((v1 + v2) != v3){ 
      msg = GetMessage(sender); 
      sender.innerHTML = msg.replace("#total#",Number(args.Value)); 
      args.IsValid = false; 
      return false; 
     } 
    } 
} 
catch (e) { 
    // something wrong default to server side validation 
} 
return true; 
} 

은 내가 사용하는 각 행에 대해 사용자 정의 유효성 검사기에 의해 호출 ... 난 자바 스크립트 함수를 생성

다음
<div align="right"><asp:CustomValidator ID="RowValidator" runat="server" 
ErrorMessage="Total of #total# does not equal 1st Preference + Ticket" 
ControlToValidate="Total" ValidateEmptyText="True" 
ClientValidationFunction="CheckRow" SetFocusOnError="True" EnableClientScript="True" 
enableViewState="False" Display="Dynamic"></asp:CustomValidator></div> 

페이지에 사업부에 코드를 배치 보낸 사람의 controltovalidate 매개 변수는 다른 필드의 이름을 얻기 위해 약간의 문자열 조작의 문제가 있습니다. 이름은

입니다.

일단 검색하면 원하는대로 할 수 있습니다. 제 경우에는 추가하고 비교합니다. 오류가 있으면 Isvalid 플래그가 지워지고 메시지가 수정됩니다.

GetMessage() 함수는 사용자가 메시지 번 이상 실수를 더합니다 그래서 만약 GetMessage() 함수는 원래 메시지의 복사본을 유지

/* 
get the error message from the validator 
store it so it can be retrieved again 
this is done because the message is altered 
*/ 
function GetMessage(sender){   

msg = window[sender.id+"_msg"]; 
if (!msg){ 
    msg = sender.innerHTML; 
    window[sender.id+"_msg"] = msg; 
} 
return msg; 
} 

보다 의미있는 오류 메시지를주고 내가 메시지를 변경할 수 있기 때문에 필요 다른 말로하면 처음으로 자리 표시자를 겹쳐 쓰는 메시지를 편집 할 때 (# total #) 처음 상태로 검색 할 수 있습니다.

DC

관련 문제