2011-02-28 2 views
0

아마도 내가 완전히 부적절한/나쁜 예를 골랐습니다. 동적으로 생성 된 Telerik RadGrids를 포함하는 사용자 정의 컨트롤이 있습니다. 사용자 컨트롤이 RadTabStrip과 함께 사용되는 RadMultiPage의 일부인 Telerik RadPageView에 추가되었습니다. 내가해야 할 일은 부모 컨트롤 인 RadPageView가 선택 될 때마다 내 usercontrol에서 Javascript 함수를 호출하여 표시를 업데이트하는 것입니다. 그래서 기본적으로 나는 다음과 같은 자바 스크립트 코드가 있습니다클라이언트 측 API를 사용한 사용자 컨트롤

function OnClientTabSelected(sender, args) 
{ 
    // Get the MyControl that is on this tab 
    var myControl = $find("whatever"); 

    // Call a method that updates the display 
    myControl.doSomething(); 
} 

감사합니다,

다윗을

+0

당신이 당신의 문제에 대한이 질문에서 단서를 얻을 수있다 : 당신이 더 많은 정보를 원한다면

내가 전체 데모 솔루션 여기에 세부 사항을 http://www.telerik.com/community/forums/aspnet -ajax/tabstrip/radgrid-onselectedindexchange-to-update-radpageview.aspx – JPReddy

+0

대신 javam을 사용하여 컨트롤을 업데이트 할 수 있습니다. 위의 링크에서 ajax와 같은 다른 방법을 시도해야 할 수도 있습니다. – JPReddy

답변

3

사용자 정의 컨트롤에 래퍼 div를 추가 한 다음 jQuery를 사용하여 해당 div를 확장하여 원하는 메서드와 속성을 추가 할 수 있습니다. 트릭은 div의 id = '< % = this.ID %>'를 설정하는 것입니다. div는 User Control과 동일한 ID를가집니다. (사용자 정의 컨트롤이 실제로 아무것도 렌더링하지 않기 때문에 괜찮습니다.).

다시 포함 된 페이지에서 그냥 $ get ('whatever')을 사용하여 UserControl의 ID를 참조 할 수 있습니다. 실제로 확장 div를 선택하면 모든 메서드와 속성이 나타납니다.

이 접근법에 대한 좋은 점은 모든 메서드와 속성이 깔끔하게 범위 지정되고 아무 것도 전역 이름 공간에 없다는 것입니다. http://programmerramblings.blogspot.com/2011/07/clientside-api-for-aspnet-user-controls.html

+0

좋아 보인다. 나는 확실히 그것을 자세히 조사 할 것이다. – dlarkin77

0

공용 제어 방법

public void doSomething 

을하고 페이지

에서이를 호출해야합니다
myControl1.doSomething(); 
+0

doSomething은 Javascript입니다. 방법. – dlarkin77

+0

죄송합니다. 질문을 더 잘 읽었어야합니다. 당신은 버튼 클릭 및 doSomething 방법에 대한 코드를 게시 할 수 있습니까? –

+0

// 버튼의 클릭 핸들러 function test() { $ find ("<% = myControl1.ClientID %>"). doSomething(); } // MyControl의 doSomething 메서드 함수 doSomething() { 경고 (새 날짜()); } – dlarkin77

2

그 기능의 이름이 확실하다면 입력 버튼에서 javascript 메소드를 호출하면됩니다.

<input type="button" value="test" onclick="doSomething()" /> 

당신이 페이지에 침을합니다 컨트롤에있는 자바 스크립트 코드를 배치하고 그들 모두 같은 형태로되어 제공 부르심에 사용할 수됩니다.

예를 들어, 해당 페이지의 소스를 살펴보면 코드는 다음과 같습니다.

<script type="text/javascript">  
    function doSomething() 
    { 
     alert(new Date()); 
    } 
</script> 

<div> 
    <span id="MyControl1_Label1">Dummy label</span> 
</div> 
<hr /> 
<input type="button" value="test" onclick="doSomething()" /> 

편집 : 이것은 내 의견으로는 이러한 방법에 액세스 할 수있는 좋은 방법이 아니다. 당신이 컨트롤 안에 몇 가지 자바 스크립트 코드를 넣으면 그 컨트롤에서만 사용되어야합니다 (규칙은 없습니다, 그냥 디자인 제안입니다). 해당 컨트롤 외부에서 컨트롤의 JavaScript 코드에 액세스하려는 경우 디자인을 다시 방문해야합니다.

해당 방법에 액세스하려는 이유에 대해 자세히 알려 주시면 더 나은 방법을 제안 할 수 있습니다.

업데이트 : : (질문을 수정 한대로) : Rad 컨트롤을 사용해 본 경험이 없으므로이 질문에 답하는 것이 조금 까다 롭습니다. 거기에 javascript를 사용하지 않고 해당 페이지의 컨트롤을 업데이트하는 데 도움이 될 몇 가지 기능이 있어야합니다, Rad에 제공되는 클라이언트 측 API를 볼 수 있습니다.

RAD 컨트롤에 대해 알고있는 사람이 도움이 될 수 있습니다.

+0

샘플 코드를 제공해 주셔서 감사합니다. 하지만 MyControl의 인스턴스를 사용하여 doSomething을 호출하면 어떻게 될까요? 예 : var x = ; x.doSomething(); – dlarkin77

+0

@ dlarkin77 : javascript 메서드는 컨트롤에 속하지 않습니다. 일단 페이지가 브라우저에 표시되면 해당 페이지의 일부이며 컨트롤과 JavaScript 사이에 링크가 없습니다. 당신이 그 페이지에 같은 컨트롤의 여러 인스턴스를 배치하면 그때 자바 스크립트 코드는 페이지에 침을 뱉어 버릴 것이지만, 그 후에는 어떤 인스턴스 에나 링크되지 않습니다. – JPReddy

+0

필자는 본래의 질문을 편집하여 (필경적으로) 내가 습득하려는 것을 더 잘 제공하도록했습니다. – dlarkin77

관련 문제