2013-08-15 14 views
0

저는 현재 ASP.NET에서 Ajax 탭 컨트롤을 사용하는 프로젝트에서 작업하고 있습니다. 이 프로젝트의 제 언어는 VB.NET입니다. 탭에서 "OnClientClick"이벤트를 활용하려고합니다. 데이터베이스의 데이터를 사용하여 탭을 채우고 VB 함수를 사용하여 실제로 탭을 만듭니다. VB 코드는 다음과 같습니다 :onClientClick Javascript 함수를 호출하고 매개 변수를 전달할 수 없습니다.

Protected Sub makeTab(ByVal categoryName As String, ByVal categoryId As String) 

      Dim label As New Label 
      label.Text = categoryName 
      Dim tab As New AjaxControlToolkit.TabPanel 
      tab.Controls.Add(label) 
      tab.HeaderText = categoryName 
      tab.OnClientClick = "display_alert(" + categoryId + ")" 

      tcResultSet.Tabs.Add(tab) 
      'Next 
      For x As Integer = 1 To tcResultSet.Tabs.Count 
       If tcResultSet.Tabs(tcResultSet.Tabs.Count - x).HeaderText = "Tab0" Then tcResultSet.Tabs.RemoveAt(tcResultSet.Tabs.Count - x) 
      Next 


     End Sub 

이 함수는 데이터베이스에서 반환하는 모든 레코드에 대해 호출됩니다.

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePartialRendering="true" /> 
          <asp:TabContainer ID="tcResultSet" runat="server" AutoPostBack="true" ScrollBars="auto" > 
           <asp:TabPanel ID="tbTab0" runat="server" HeaderText="Tab0" /> 
          </asp:TabContainer> 

내 자바 스크립트 함수는 다음과 같습니다 : 영문 페이지에서

탭 컨테이너는

<script type="text/javascript" > 
    function display_alert(categoryNumber) { 
     window.alert("Hello! You clicked a tab"); 
    } 
</script> 

과는 페이지의 상단에 내 페이지 헤드의 내부에 배치됩니다. 보시다시피, 저는 현재 자바 스크립트 함수 내에서 변수를 사용하지 않고 있습니다. 현재이 코드는 작동하지 않습니다. Javascript 함수 정의에서 변수를 제거하고 "display_alert"와 같은 자바 스크립트 함수를 호출하면 작동합니다. 함수 이름 뒤에 "()"를 포함하면 작동하지 않습니다. 이 주위에 어떤 방법이 있습니까? 이 방법을 제대로 작동시키는 방법은 무엇입니까?

+0

그래서'tab.OnClientClick = "display_alert()"'를 사용하면 작동하지 않습니까? 또한 인라인 이벤트 핸들러를 설정하는 데 'OnClientClick'을 사용하지 말고 대신 자바 스크립트로 눈에 띄지 않게 바인딩하는 것이 좋습니다. 요소에 특정'class' 속성을 부여하여 그 방식으로 찾을 수 있습니다. 이것은 DOM이 준비되었을 때 (예 :'window.onload') 할 수 있으며, VB에서'data- *'속성을 설정하여'categoryId'에 접근 할 수 있습니다. – Ian

+0

예, tab.OnClientClick = "display_alert()"를 사용하면 작동하지 않습니다. – user2233255

+0

글쎄, 탭 # 1을 클릭하면 자바 스크립트 기능에서 Tab # 1 또는 Tab # 2가 아닌 Tab # 1이 클릭되었음을 알아야합니다. Javascript를 사용하여 메서드 호출을 바인딩하면 알 수 있습니까? – user2233255

답변

0

나는이 앱에 대한 고객의 사양에 AJAX 탭이 필요하다고 말했고, 대화를 한 후에 다른 옵션을 사용할 수 있다고 생각했습니다. 이제 동적으로 HTML 버튼을 만들고 문제없이 자바 스크립트를 호출 할 수 있습니다. 문제가 해결되었습니다.

0

OnClientClick에 연결된 이벤트 처리기에는 매개 변수를 사용할 수 없습니다. 올바르게 작동하게하려면 함수에 코드를 래핑해야합니다. 자바 스크립트에서이 너무 마크 업에서 작동

tab.OnClientClick = function() {alert('my message here');} 

, 나는 그것이 이벤트 핸들러에 대한 서명 할의 생각

<asp:TabPanel ID="myTab" runat="server" OnClientClick="function(){alert('this works');}"> 

같은 것을 할 것이다. OnClientClick에 할당하면 이벤트 핸들러는 "보닛 아래에있는"기존 이벤트 처리기에 태그됩니다. 서명이 동일하지 않으면 런타임 오류가 발생합니다.