1

目前在我的应用程序中,使用 ASP.Net 成员资格提供程序验证用户,并且 ASP.Net 默认登录页面仅包含用户名和密码。这在这两个领域工作得很好。但是根据我目前的要求,需要一个额外的字段“公司”在 ASP.Net 登录页面中显示为下拉列表,并使用 ASP.NET 会员提供程序验证三个公司、用户名和密码。这是否可能,使用 ASP.Net 会员提供程序自定义带有额外字段的 ASP.Net 登录页面?您能否给我一些想法,我该如何处理?

4

2 回答 2

1

成员资格提供者的 ValidateUser 方法只接受两个参数 - 用户名和密码。即使覆盖它,也不能传递三个参数。

ValidateUser(string username, string password)

基本上,您不能使用登录控件来验证用户。相反,您想自己验证用户。这是一个示例代码 -

在此处输入图像描述

注意:出于演示目的,我删除了登录控件中的代码。

<asp:Login ID="LoginUser" runat="server" OnAuthenticate="LoginUser_Authenticate">
    <LayoutTemplate>
        <asp:TextBox ID="UserName" runat="server" />
        <asp:TextBox ID="Password" runat="server" TextMode="Password" />
        <asp:DropDownList ID="CompanyDropDownList" runat="server">
            <asp:ListItem Text="One" Value="1" />
            <asp:ListItem Text="Two" Value="2" />
        </asp:DropDownList>
        <asp:Button ID="LoginButton" runat="server" CommandName="Login" 
        Text="Log In" ValidationGroup="LoginUserValidationGroup" />
    </LayoutTemplate>
</asp:Login>

protected void LoginUser_Authenticate(object sender, AuthenticateEventArgs e)
{
    var companyName = LoginUser.FindControl("CompanyDropDownList") 
        as DropDownList;

    if(MyValidateUser(LoginUser.UserName, LoginUser.Password, 
        companyName.SelectedValue))
    {
        FormsAuthentication.SetAuthCookie(LoginUser.UserName, false);

        // Do something
    }
}

请确保您使用新的ASP.NET 通用提供程序

于 2013-04-01T14:28:35.643 回答
0

您可以为此使用配置文件提供程序。

或者,您可以创建自己的表来存储其他用户相关信息。这需要做更多的工作,因为您需要创建自己的表并创建代码以在这些表中获取和保存数据,但我发现以这种方式使用自定义表可以提供更大的灵活性和更多的可维护性而不是 Profile Provider(特别是默认的 Profile Provider,SqlProfileProvider,它以低效、非规范化的方式存储配置文件数据)。

查看本教程,您可以在其中找到此过程的演练:存储附加用户信息。

于 2013-04-01T12:41:19.657 回答