0

このASP.NetLoginViewを使用して、Webページに読み込まれるときにユーザー名TextBoxにフォーカスを設定します。

<asp:LoginView 
    ID="loginViewMain" 
    runat="server">

    <LoggedInTemplate>
        <asp:LoginName 
            ID="loginName" 
            runat="server"
            FormatString="Hello, {0}!<br/><br/> You have successfully<br/> logged onto the staff site." />

        <br/>
        <br/>

        (<asp:LoginStatus ID="loginStatus" runat="server" />)

        <br/>
        <br/>

    </LoggedInTemplate>

    <AnonymousTemplate>
        <asp:LoginStatus 
            ID="loginStatus" 
            runat="server" />
    </AnonymousTemplate>
</asp:LoginView>

これは、ユーザー名TextBoxに焦点を合わせるために使用しようとしたコードビハインドです。

Private Sub loginViewMain_Load(sender As Object, e As EventArgs) Handles loginViewMain.Load

    Dim objContentPlaceHolder As ContentPlaceHolder
    Dim objLoginView As LoginView
    Dim objUserName As TextBox

    objContentPlaceHolder = CType(Me.FindControl("ContentPlaceHolderBody"), ContentPlaceHolder)

    If Not objContentPlaceHolder Is Nothing Then

        objLoginView = CType(objContentPlaceHolder.FindControl("loginViewMain"), LoginView)

        If Not objLoginView Is Nothing Then
            objUserName = objLoginView.FindControl("UserName")
            objUserName.Focus()
        End If
    End If
End Sub

実行はこのIf構造に入ります:

If Not objLoginView Is Nothing Then

ユーザー名TextBoxを取得するために、このコーディングのIf構造に他に何を追加する必要があるか教えてください。

4

2 に答える 2

2

FindControlは、1つのツリーレベルの深さのみを検索します。

代わりに再帰関数を使用してみてください

例えば:

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
}

その後、呼び出しは

objLoginView = CType(FindControlRecursive(objContentPlaceHolder, "loginViewMain"), LoginView);

お役に立てば幸いです。

于 2013-02-27T15:46:25.983 に答える
2

LoginViewコントロールの詳細を知る必要なしにそれを行うことができます。代わりに、JavaScriptを使用して最初のテキストボックスを見つけ、それに焦点を合わせます。

コードビハインドファイルに次のコードを追加します。

var script = string.Format(@"
    var inputs = document.getElementById('{0}').getElementsByTagName('input');
    for (var i = 0; i < inputs.length; i++) {{
        var inp = inputs[i];
        if (inp.type.toUpperCase() !== 'TEXT') continue;
        inp.focus();
        inp.select();
        break;
    }}", this.LoginView.ClientID);

// register the script
ScriptManager.RegisterStartupScript(this, this.GetType(), "login focus", script, true);

またはVB.NETの場合:

Dim script = String.Format(
    "var inputs = document.getElementById('{0}').getElementsByTagName('input');" &
    "for (var i = 0; i < inputs.length; i++) {{" &
    "    var inp = inputs[i];" & 
    "    if (inp.type.toUpperCase() !== 'TEXT') continue;" & 
    "    inp.focus();" & 
    "    inp.select();" &
    "    break;" & 
    "}}", Me.LoginView.ClientID)

' register the script
ScriptManager.RegisterStartupScript(Me, TypeOf(this), "login focus", script, True)
于 2013-02-27T15:47:23.877 に答える