2009-10-07 116 views

回答

4

您可以在控制自身使用.Focus(),或拨打页面的SetFocus(),传递到控制的参考。请注意,您需要传入控件,而不是ID,因为这似乎不受支持(至少从.NET 3.5开始)。有关更多信息,请参阅MSDN Page.SetFocus

至于方法之间的区别?它们在很大程度上是可以互换的,并且您应该根据您访问的对象调用更方便的方法 - 通常在控件上调用.Focus()更容易。请参阅MSDN上的How to Set Focus on ASP.NET Web Server Controls

1

控件具有可以调用将焦点设置到控制的聚焦()方法。

txtUserName.Focus(); 

另外,该页面具有SetFocus的()方法,该方法它可以是一个控制对象或要焦点设置到控制的ID。

this.Page.SetFocus(txtUserName); 

this.Page.SetFocus(txtUserName.ClientID); 
+0

两者功能相同吗? – 2009-10-07 20:22:31

+0

@NoviceDeveloper - 在查看源代码后,答案是肯定的,它们具有相同的功能。 – BornToCode 2016-03-31 12:52:30

3

根据您希望您的工作流程是怎么样,或者你的规格是什么,你有两个选择:

  1. 设定:如果从服务器端。像John提到的那样,您可以使用UI控件可用的Focus()方法。当页面在浏览器中呈现时,这会将焦点应用于控件。但是,由于用户与页面上的其他元素进行交互,您将会失去它。

  2. 使用JavaScript将其设置在客户端。这将为您提供更大的灵活性,因为您可以基于用户交互应用焦点。 要将重点放在客户端,可以使用DOM(文档对象模型)。您需要获取对该控件的引用,然后您可以调用focus()方法:

    document.getElementById(txtUserName).focus();

也就是说,如果控件的ID(因为它在客户端注册)是txtUserName。根据页面的布局,这种情况不太可能发生,如果您更改布局,则可能会遇到麻烦,所以这不是最佳做法。

一个好的做法是注册一个JavaScript变量,其目的是保存控件的客户端ID,因为它将呈现在HTML中。 您可以通过使用ClientScriptManager类实现这一点:

ClientScript.RegisterClientScriptBlock(this.GetType(), "setFocus", "var focusFieldId = '" + txtUserName.ClientID + "';", true); 

,然后在客户端,你可以说

document.getElementById(focusFieldId).focus(); 

你可以重构这个成例如称为setUserNameFocus()方法,然后调用该方法无论你想要什么客户端事件。例如,一种流行的做法是当用户点击页面上的某个位置时,将注意力集中在某个字段上。比如你的HTML元素body可能是这样的,如果你不希望永远失去焦点为你的元素:

<body onload="setUserNameFocus();" onclick="setUserNameFocus();"> 
+0

到ClientScriptManager的链接是错误的。它指向过时的API。试图编辑答案时出现错误。我稍后会尝试对其进行编辑。与此同时,链接到正确的引用是这样的: http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.aspx – 2009-10-07 21:01:02

0

有一个简单的方法来此。

在Visual Studio中,将下面的Page_Load事件......

Page.Form.DefaultFocus = TextBox1.ClientID; 

Page.Form.DefaultButton = Button1.UniqueID; 

请注明的 “回答”,如果回答你的问题。