2013-09-23 284 views
0

我無法在LoginView中的Login Control中獲取用戶名文本框。它告訴我UNAME「對象不設置到對象的實例」Findcontrol Login for LoginView

Dim UName As TextBox = CType(LoginView1.FindControl("Login1").FindControl("UserName"), TextBox) 

ASPX

<asp:LoginView ID="LoginView1" runat="server"> 
      <LoggedInTemplate> 
       <div class="logged">       
        <ul class="Logged"> 
         <li><asp:LoginStatus ID="LoginStatus1" Font-Size="Small" LogoutPageUrl="http://NCOASouth.com" LogoutAction="Redirect" runat="server" /></li> 
         <li><asp:HyperLink ID="AdminLink" Visible="false" runat="server" NavigateUrl="~/Admin/Default.aspx" Text="Administration"></asp:HyperLink></li> 
         <li>Welcome, <asp:LoginName ID="LoginName1" runat="server" />!</li> 

        </ul> 
       </div> 


      </LoggedInTemplate> 
      <AnonymousTemplate> 
       <h2 class="title1">Officials Login</h2>    
        <br /><br /><br /> 
        <asp:Login ID="Login1" DestinationPageUrl="http://NCOASouth.com/redirect.aspx" 
           CreateUserText="create new account" CreateUserUrl="~/Register.aspx" runat="server"> 
           <LayoutTemplate> 
            <asp:TextBox ID="UserName" CssClass="textbox" runat="server" Width="195px" placeholder="Username"></asp:TextBox><br /> 
            <asp:TextBox ID="Password" CssClass="textbox" runat="server" TextMode="Password" Width="195px" placeholder="Password"></asp:TextBox><br /><br /> 
            <asp:Button ID="LoginButton" ValidationGroup="ctl00$Login1" CssClass="textbox" runat="server" CommandName="Login" Width="200px" Text="Sign In"/> 
            <br /><br /> 
            <asp:HyperLink ID="createnewuser" runat="server" NavigateUrl="~/Register.aspx" Text="Register for Free" /><br /> 
            <asp:HyperLink ID="forgotpassword" runat="server" NavigateUrl="~/forgotPassword.aspx" Text="Forgot Password" /> 

            <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal> 
            <br /> 
            <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" 
             ControlToValidate="UserName" ErrorMessage="User Name is required." 
             ToolTip="User Name is required." ValidationGroup="ctl00$Login1"></asp:RequiredFieldValidator> 
            <br /> 
            <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" 
             ControlToValidate="Password" ErrorMessage="Password is required." 
             ToolTip="Password is required." ValidationGroup="ctl00$Login1"></asp:RequiredFieldValidator> 
           </LayoutTemplate> 
          </asp:Login> 
      </AnonymousTemplate> 
     </asp:LoginView> 
+0

這是一個重複的,並在這裏回答:http://stackoverflow.com/questions/7769554/find-control-in-loginview – mlg74

回答

0

這是在C#中,但你可以使用類似這樣的東西,以找到您的控制:

http://weblogs.asp.net/eporter/archive/2007/02/24/asp-net-findcontrol-recursive-with-generics.aspx

一般來說,FindControl很少有用,除非你只想要去一層深。

編輯:

從提供的鏈接:

public static T FindControl<T>(System.Web.UI.ControlCollection Controls, string ControlName) where T : class 
{ 
    T found = default(T); 

    if (Controls != null && Controls.Count > 0) 
    { 
      for (int i = 0; i < Controls.Count; i++) 
      { 
       if (Controls[i] is T && Controls[i].ID == ControlName) 
       { 
        found = Controls[i] as T; 
        break; 
       } 
       else 
        found = FindControl<T>(Controls[i].Controls); 
      } 
    } 

    return found; 
} 

而在你的情況,你可以使用(在C#):

var uName = FindControl<TextBox>(LoginView1.Controls, "UserName"); 

在VB中的仿製藥的使用。 NET並不是我非常熟悉的東西。您可以刪除這個的泛型部分,只是使用Control.

+0

不知道如何遞歸泛型適用這裏 – mlg74

+0

因爲你的控件嵌套在模板中,而不是直接的後代。遞歸搜索將從您指定的控件樹中的任意點開始,然後向下搜索,直至找到匹配的控件。尋找控制不是友好/智能。 –