나는이 문제를 해결했다. 우아한 솔루션은 아니지만 작동합니다.
먼저 나는
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