2010-04-06 132 views
1

问题:在ASP .NET中将焦点设置为Web控件的最佳方式是什么?如何将焦点设置为ASP.NET中的Web控件

我可以做到,但它很丑。我有一个网页控制包裹在网页控制托管的网页控制。所以,如果你做了一个视图|在页面上的源代码就像WrapperControl_Control_TextBox。我已经尝试过抓取元素并将其设置为焦点的“已尝试和真正的”Javascript方法:document.getElementByID(“WrapperControl_Control_TextBox”).focus();并没有奏效。我不知道为什么。

我知道我可能会这样做: document.getElementById(“<%= TextBox.ClientID%>”).focus();我想也是。如果页面中有“<%%>”,则无法动态地将控件添加到标题,因为这会导致另一个完全单独的错误,因此无法正常工作。 GAH。

在“最底部”控件中,我试着设置焦点(Page_Load中的TextBox.Focus()),但这也不起作用。

无论如何,工作的方式是通过简单地采用页面的ControlsCollection,抓住我需要的控件,获取它的集合,抓住下一个较低的控件等等。

我只需要做这七次。所以我有八个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:

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

我们没有JQuery,但我会考虑添加它。谢谢。 – Dan7el 2010-04-07 14:01:00

+0

我安装了JQuery并且使用脚本。有用!万分感谢! – Dan7el 2010-04-07 18:25:12

0

你可以围绕“不能添加动态控件,因为页面上存在<%=%>块“错误,方法是将块更改为使用数据绑定语法:<%# TextBox.ClientID %>,并在Page_Load中手动调用Page.DataBind()

+0

有趣。我试过<%# %>的窍门,但不知道我需要添加Page.DataBind()。我会看看那个。谢谢。 – Dan7el 2010-04-07 14:01:32

+0

自从上面提到的JQuery解决方案起作用后,我没有尝试过,但是我非常感谢帮助。稍后我可能会考虑使用这种技术。 – Dan7el 2010-04-07 18:26:07

0

如果你真的想使用Page_Load方法,那么你可以随时拨打Page对象上SetFocus方法。

Page.SetFocus(myTextBox); 
+0

我会试试这个。谢谢。 – Dan7el 2010-04-07 14:02:00

+0

自从上面提到的JQuery解决方案起作用以后,我没有尝试这方面的工作,但我非常感谢帮助。稍后我可能会考虑使用这种技术。 – Dan7el 2010-04-07 18:26:42

相关问题