2010-04-06 7 views
1

질문 : ASP .NET의 웹 컨트롤에 포커스를 설정하는 가장 좋은 방법은 무엇입니까?ASP.NET의 웹 컨트롤에 포커스를 설정하는 방법

나는 할 수 있지만 못생긴다. 나는 웹 컨트롤이 웹 페이지에 호스팅 된 웹 컨트롤에 싸여 있습니다. 그래서, 당신이보기를한다면 | 소스는 페이지에서 ID는 WrapperControl_Control_TextBox와 유사합니다.

나는 요소를 잡고 포커스를 설정하는 "실용적이고"정확한 자바 메소드를 시도했다. document.getElementByID ("WrapperControl_Control_TextBox") .focus(); 그것은 작동하지 않았다. 이유가 확실하지 않습니다.

내가 할 수있는 것으로 알고 있습니다. document.getElementById ("< % = TextBox.ClientID %>") .focus(); 너무, 나는 생각한다. 페이지에 "< %%"가 있으면 헤더에 컨트롤을 동적으로 추가 할 수 없다는 사실에 기반한 또 다른 완전히 별개의 오류로 인해 작동하지 않습니다. GAH.

"맨 아래"컨트롤에서 나는 Page_Load에서 포커스 (TextBox.Focus())를 설정하려고 시도했으나 작동하지 않습니다.

어쨌든 작동하는 방법은 페이지의 ControlsCollection을 가져 와서 필요한 컨트롤을 가져 와서 컬렉션을 얻고 다음 컨트롤을 가져 오는 것입니다.

나는 이것을 7 번만하면됩니다. 그래서 저는 8 개의 foreach 루프를 가지고 있습니다.

기본적으로, 내 코드는 다음과 같다 :

/////////////////////////////// // 페이지

ControlCollection controls = Controls; 

foreach(Control control in controls) 
{ 
    if (string.Equals(control.ID, "FormID", StringComparison.InvariantCultureIgnore)) 
    { 
     ControlCollection nextControls = control.Controls; 

     foreach(Control nextControl in nextControls) 
     { 
     if (string.Equals(nextControl.ID, "DivICareAboutInTheForm", StringComparison.InvariantCultureIgnor)) 
     { 
      ControlCollection nextNextControls = nextControl.Controls; 
      //: 
      //: 
      //Yes, it's that bad and so forth. 
      //: 
      //: 
     } 
     } 
    } 
} 
당신은 주위에 얻을 수

답변

2

jQuery를 사용하여 텍스트 상자 이름으로 끝나는 ID를 검색 할 수 있습니다. 이렇게하면 UniqueID 서버 측 코드를 호출 할 필요가 없습니다. 그냥 같은 이름

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('[id$=txtBox]').focus(); 
      }); 
    </script> 

또는로 끝나는 여러 컨트롤을하지 않도록해야합니다, 당신은 기본 텍스트 상자 클래스의 이름을 사용할 수 있습니다.

<asp:Textbox ID="txtBox" runat="server" cCssClass="defaultTextbox" /> 

JQuery와 : 당신이 정말 Page_Load 방법을 사용하려면

$('.defaultTextbox').focus(); 
+0

우리는 JQuery가 없지만 추가 할 것이 있습니다. 감사. – Dan7el

+0

JQuery를 설치하고 스크립트를 실행합니다. 그것은 작동합니다! 엄청 고마워! – Dan7el

0

은 "추가 할 수 없습니다 /////////////////////////////// 동적 제어 : < % = %> 블록이 페이지에 존재하므로 "블록을 변경하여 데이터 바인딩 구문 : <%# TextBox.ClientID %>을 사용하고 Page_Load에서 수동으로 Page.DataBind()을 호출하십시오.

+0

흥미 롭군요. <%# %> 트릭을 시도했지만 Page.DataBind()를 추가해야한다는 것을 알지 못했습니다. 나는 그것을 보게 될 것이다. 감사. – Dan7el

+0

위의 JQuery 솔루션이 작동 한 이후로 시도하지 않았지만 도움을 주셔서 감사합니다. 나중에이 기법을 사용할 수 있습니다. – Dan7el

0

, 당신은 항상 Page 개체에 SetFocus 메소드를 호출 할 수있다.

Page.SetFocus(myTextBox); 
+0

나는 이것을 시험 할 것이다. 감사. – Dan7el

+0

위의 JQuery 솔루션이 작동 한 이후로이 작업을 시도하지는 않았지만 도움을 주셔서 감사합니다. 나중에이 기법을 사용할 수 있습니다. – Dan7el

관련 문제