2014-08-28 2 views
0

.NET 웹 사용자 정의 컨트롤을 작성했습니다. 여기에는 몇 가지 서버 컨트롤과 일부 JavaScript가 포함되어 있습니다.컨트롤 서버와 연결된 액세스 서버 컨트롤?

또한 현재 컨트롤에 유효한 데이터가 포함되어 있는지 나타내는 값을 반환하는 JavaScript 기능이 전역 ValidateMyControl()입니다. 이 함수는 컨트롤이 포함 된 페이지의 JavaScript에서 호출 할 수 있습니다.

제 문제는 페이지에 두 개 이상의 컨트롤이있는 경우입니다. 페이지의 클라이언트 스크립트가 다음과 같이 컨트롤 ID를 전달하도록 할 수 있습니다.

ValidateMyControl('<%= MyControl.ClientID %>'); 

코드가 유효성을 검사하려는 인스턴스를 식별합니다.

그러나 내 ValidateMyControl() 컨트롤은 요청 된 인스턴스와 연결된 서버 컨트롤을 참조하기 위해 해당 ID를 어떻게 사용합니까?

내가 생각한 것은 나를 위해 모이는 것 같습니다. 어떤 팁? 또는 이와 같은 여러 인스턴스를 처리하는 다른 방법은?

편집 :

그래서 내가 생각 한 가지 방법은 다음과 같이 보일 것이다 :

var instanceData = {}; 

$(function() { 
    instanceData['<%= this.ClientID %>'] = { 
     HiddenID: '<%= hdnCompanyId.ClientID %>', 
     TextID: '<%= txtCompanyName.ClientID %>', 
     ErrorMessageID: '<%= divErrorMessage.ClientID %>' 
    }; 
}); 

아이디어가 ID에 컨트롤 인스턴스를 매핑 초기화하는 동안 배열에 객체를 추가하는 것입니다 그것의 서버 컨트롤이야.

그러나 이것은 비효율적 인 것처럼 보입니다. 더 좋은 방법을 찾고 싶어합니다.

답변

0

해당 CSS 클래스가 정의되지 않은 경우에도 사용자 컨트롤 내의 서버 컨트롤에 class 특성을 설정하십시오. 다음 :

function ValidateMyControl(aControlId) { 
    var companyId = $("#" + aControlId).find(".classCompanyId").val(); 
    ... 
} 
+0

합리적인 제안처럼 보이지만 컨트롤 자체에 대한 요소가 없습니다. 자식 컨트롤을 렌더링하지만 컨테이너에 대한 요소는 없습니다. –

+0

사용자 정의 컨트롤의 내용을 Panel (클라이언트의 div)에 래핑하고'ValidateMyControl ('<% = MyControl.Panel.ClientID %>');'를 사용하십시오. 또는 'id = "<% = MyControl.ClientID %>"'인 runat-server가 아닌 div에서도 가능합니다. – Igor