如何在默认情况下将焦点设置为控件?

时间:2011-04-29 12:43:28

标签: asp.net

我有一个登录控件和一个创建用户控件我的网页...我希望当页面加载时光标位于登录控件的用户名文本框中...我怎么能这样做?

<asp:LoginView ID="LoginView1" runat="server">
              <LoggedInTemplate>
                  Bingo..!!! Youuuuu did it...<asp:LoginName ID="LoginName1" runat="server" />.



              </LoggedInTemplate>
              <AnonymousTemplate>

                  <asp:DropShadowExtender ID="DropShadowExtender1" runat="server" 
                                            TargetControlID="Panel1" 
                                            Rounded="true" 
                                            Opacity=".38">
                  </asp:DropShadowExtender>
                  <asp:Panel ID="Panel1" runat="server" 
                                         BackColor="Silver">
                  <asp:Login ID="Login1" runat="server" 
                                         DestinationPageUrl="~/ViewCart_aspx/ViewCart.aspx" 
                                         Height="152px" 
                                         Width="396px" 
                                         RememberMeSet="True" 
                                         OnLoggedIn="ContinueButton_Click" >
                      <LayoutTemplate>
                          <fieldset>
                          <table border="0" 
                                 cellpadding="1" 
                                 cellspacing="0" 
                                 style="border-collapse:collapse;">
                              <tr>
                                  <td>
                                      <table border="0" cellpadding="0" style="height:152px;width:396px;">
                                          <tr>
                                              <td align="center" colspan="2">
                                                 <h3>Log In</h3> </td>
                                          </tr>
                                          <tr>
                                              <td align="right">
                                                  <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">User Name:</asp:Label>
                                              </td>
                                              <td>&nbsp;
                                                  <asp:TextBox ID="UserName" runat="server" Width="150px" TabIndex="0"></asp:TextBox>
                                                  <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" 
                                                      ControlToValidate="UserName" ErrorMessage="User Name is required." 
                                                      ToolTip="User Name is required." ValidationGroup="ctl01$Login1">*</asp:RequiredFieldValidator>
                                              </td>
                                          </tr>

你可以看到UserName文本框在登录控件内...所以我无法访问它的属性..我怎么找到控件?

3 个答案:

答案 0 :(得分:2)

编辑:正如您在评论中提到的,您希望将登录按钮设置为默认按钮。为此,您需要将此按钮设置为默认按钮。

不幸的是,正如我在您的问题评论中所说的那样,您没有正确格式化代码。所以我假设登录按钮位于与用户名文本框相同的名称容器中,其名称为btnLogin,您可以将此控件设置为具有HtmlForm.DefaultButton属性的默认控件,因此:

您可以使用Page.SetFocus。它将浏览器焦点设置为指定的控件:

Page.SetFocus(txtName);

如果您想要访问UserName文本框,可以使用:

var login1 = LoginView1.FindControl("Login1") as Login;
if (login1 != null)
{
    var txtUserName = login1.FindControl("UserName");
    if (txtUserName != null)
    {
        Page.SetFocus(txtUserName);
    }

    var btnLogin = login1.FindControl("btnLogin");
    if (btnLogin != null) 
    {
         Page.Form.DefaultButton = btnLogin.UniqueID;
    }
}

但请注意:

  

对于LoginView控制,当时   在某个时间添加到页面上,   只有一个Template(匿名或   loggedIn)应用于Control   例如,那时我们只能   检索那些的引用   活动模板中的控件(不能   访问非活动的那些   模板)。

答案 1 :(得分:1)

在页面加载事件中编写代码,如下所示

textbox1.focus();

无论在哪里,都可以使用控件的ID来访问后面代码中的控件。

答案 2 :(得分:0)

在这种情况下,DefaultFocus属性似乎是合适的:

// inside page_load, LoginUser is the Login control
Page.Form.DefaultFocus = LoginUser.FindControl("Username").ClientID;

相关问题:Set focus to textbox in ASP.NET Login control on page load