2012-08-03 3 views
2

question을 기반으로 확인란을 선택/선택 해제 할 때 다양한 RequiredFieldValidator 컨트롤을 켜거나 끄려고합니다. 하지만 각 체크 박스에 대해 별도의 js 함수를 사용하는 대신 유효성을 검사 할 입력의 ClientID를 전달하려는 경우 (여기에 하나의 INPUT 만 있지만 작업이 완료되면 더 많은 js가없는 INPUT을 추가 할 수 있음을 알 수 있습니다) :ASP.NET에서 control.ClientId를 OnClick 함수에 전달하는 방법은 무엇입니까?

<asp:TextBox ID="txtSubject" runat="server" /> 
<asp:CheckBox ID="chkSubjectRequired" runat="server" 
    OnClick="updateValidator('<%= rfvSubject.ClientID %>');" /> 
<asp:RequiredFieldValidator ID="rfvSubject" ControlToValidate="txtSubject" 
    ErrorMessage="You must enter a subject." runat="server" /> 

<script> 
function updateValidator(inputId) { 
     var enableValidator = !event.srcElement.checked; 
     var theInput = document.getElementById(inputId); 
     ValidatorEnable(theInput, enableValidator); 
} 
</script> 

현재 스크립틀릿 txtSubject.ClientID은 평가되지 않고 바로 출력됩니다. 나는 이것이 간단하다고 확신하지만 적절한 구문을 모른다.

답변

2

코드 숨김 (또는 스크립트 섹션)를 통해 그것을 추가하는 방법에 대한 방법 :

checkSubjectRequired.Attributes.Add("onclick", "updateValidator(" + 
    txtSubject.ClientID + ")"); 

This explaination of ClientID 도움이 될 수 있습니다 .

+0

그래, 그것이 자바 스크립트에서 않는 한 aspx 파일에서 할 수없는 것 같습니다. 결국 자바 스크립트에서 작업을 마쳤습니다. 예 :' 다음에 SCRIPT 섹션에서 : function updateValidator (rfvName) {var inputMap = { "rfvSubject": "<% = rfvSubject.ClientId %>", ... more entries}; var rfvId = inputMap [rfvName]; ... rfvId로 할 일 ... '. 그래, 조금 심하긴하지만 어떤 이유로 나는 코드 숨김이 onclick 추가를 원하지 않았다. – Rory

0

이것은; ASP.NET 구문 분석기는 서버 쪽 컨트롤 (즉, runat = 'server'로 만든 컨트롤)에 대해 서버 태그 "< % = %>"을 구문 분석 할 수 없습니다. 사용 다음은 :

<asp:TextBox ID="txtSubject" runat="server" /> 
<asp:CheckBox ID="chkSubjectRequired" runat="server" 
    OnClick="updateValidator('<%#txtSubject.ClientID %>');" /> 
<asp:RequiredFieldValidator ID="rfvSubject" ControlToValidate="txtSubject" 
    ErrorMessage="You must enter a subject." runat="server" /> 

<script> 
function updateValidator(inputId) { 
     var enableValidator = !event.srcElement.checked; 
     var theInput = document.getElementById(inputId); 
     ValidatorEnable(theInput, enableValidator); 
} 
</script> 
+0

hmmm ... 그래서'<% ='를'<% # '로 대체 하시겠습니까? 'onclick = "updateValidator ('<% # txtSubject.ClientID %>');"', 즉 같은 문제를 해결하는 출력 페이지에서. – Rory

+0

따옴표를 이스케이프 처리하십시오. onclick = "updateValidator ('"+ <% # txtSubject.ClientID %> + "');" –

+1

아니요, 싫어 해요 : 구문 오류 - 예기치 않은 토큰 – Rory

0

당신은이 작업을 수행 할 수 있습니다 :

<asp:TextBox ID="txtSubject" runat="server" /> 
    <asp:CheckBox ID="chkSubjectRequired" runat="server" 
    OnClientClick="updateValidator(this.id);" /> 
<asp:RequiredFieldValidator ID="rfvSubject" ControlToValidate="txtSubject" 
    ErrorMessage="You must enter a subject." runat="server" /> 

<script> 
function updateValidator(inputId) { 
     var enableValidator = !event.srcElement.checked; 
     var theInput = document.getElementById(inputId); 
     ValidatorEnable(theInput, enableValidator); 
} 
</script> 
+0

하지만 텍스트 상자 컨트롤을 원할 때 체크 상자의 ID를 전달합니다. – Rory

+0

귀하의 예제가 유효성 검사기의'ClientID'를 전달하려고하지 않습니다. "OnClick ="updateValidator ('<% = rfvSubject.ClientID %>'); "" " –

+0

맞습니다 - 제 실수입니다. 텍스트 상자 또는 체크 상자가 아닌 유효성 검사기 컨트롤. – Rory

관련 문제