向asp:login控件添加更多文本框

时间:2010-09-21 14:17:23

标签: asp.net authentication login login-control

我正在使用ASP.NET 4.0 WebForms并使用该控件。但是我想添加3个文本框,电子邮件,密码和dateofbirth。电子邮件和密码标准为用户名和密码,但如果我有第三个文本框用于出生日期(登录按钮上方但在电子邮件和密码下方),在我的代码后面,此控件的ID无法识别,因为它之间标签的范围。

有没有办法使用此控件添加更多控件,然后单独验证它们?

2 个答案:

答案 0 :(得分:4)

从Visual Studio Design View中,您可以将asp:LoginControl转换为模板。然后,它会公开控件中的所有html。然后,您可以在那里添加您想要的内容。

<asp:Login ID="Login1"
            runat="server">
            <LayoutTemplate>
                <table cellpadding="1" cellspacing="0" style="border-collapse:collapse;">
                    <tr>
                        <td>
                            <table cellpadding="0">
                                <tr>
                                    <td align="center" colspan="2">
                                        Log In</td>
                                </tr>
                                <tr>
                                    <td align="right">
                                        <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">User Name:</asp:Label>
                                    </td>
                                    <td>
                                        <asp:TextBox ID="UserName" runat="server"></asp:TextBox>
                                        <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" 
                                            ControlToValidate="UserName" ErrorMessage="User Name is required." 
                                            ToolTip="User Name is required." ValidationGroup="Login1">*</asp:RequiredFieldValidator>
                                    </td>
                                </tr>
                                <tr>
                                    <td align="right">
                                        <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
                                    </td>
                                    <td>
                                        <asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>
                                        <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" 
                                            ControlToValidate="Password" ErrorMessage="Password is required." 
                                            ToolTip="Password is required." ValidationGroup="Login1">*</asp:RequiredFieldValidator>
                                    </td>
                                </tr>
                                <tr>
                                    <td colspan="2">
                                        <asp:CheckBox ID="RememberMe" runat="server" Text="Remember me next time." />
                                    </td>
                                </tr>
                                <tr>
                                    <td align="center" colspan="2" style="color:Red;">
                                        <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>
                                    </td>
                                </tr>
                                <tr>
                                    <td align="right" colspan="2">
                                        <asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" 
                                            ValidationGroup="Login1" />
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                </table>
            </LayoutTemplate>
        </asp:Login>

在您的代码中,您需要使用Login1.FindControl("")来访问您想要访问的任何其他控件。

因此,对于新的asp:textbox,您可以将其作为:

<asp:TextBox id="TextBox1" runat="server" />

在后面的代码中:

TextBox TextBox1 = (TextBox)Login1.FindControl("TextBox1");

答案 1 :(得分:0)

您还可以以编程方式向 ASP 登录控件添加一个或多个附加控件! 例如,您可以像这样添加一个新的文本框:

// Override the OnInit() method.
override protected void OnInit(EventArgs e)
{

  // Dynamically create controls
        var newTextBoxControl = new TextBox();
        newTextBoxControl.Text = "dfsdf";
        newTextBoxControl.ID = "PinCode";
        newTextBoxControl.MaxLength = 5;
        newTextBoxControl.CssClass="form-control";
        var targetControl=FindControlRecursive(Login1, "Login1_LoginButton");            
        targetControl.Parent.Controls.AddAt(0,txt);
}

private Control FindControlRecursive(Control control, string controlId)
{
    if (control.ClientID == controlId) return control;

    Control result = null;
    foreach (Control childControl in control.Controls)
    {
        result = FindControlRecursive(childControl, controlId);

        if (result != null)
            break;
    }
    return result;
}