Asp.net 如何在不使用asp控件的情况下对登录表单进行身份验证

Asp.net 如何在不使用asp控件的情况下对登录表单进行身份验证,asp.net,vb.net,login,forms-authentication,Asp.net,Vb.net,Login,Forms Authentication,我已经建立了一个非常好的登录页面,其中我使用HTML输入标记作为我的用户名、密码和登录按钮。我有两种不同的登录表单,每种类型的用户(学生用户和业务用户)一种。我从未对数据库进行过身份验证,因此我认为我的方法很容易执行。在网上搜寻了一些简单的方法来实现我已经拥有的东西之后,我发现如果不使用asp:login控件,我几乎不可能想出如何实现我的目标。我不情愿地放弃了我所拥有的,并加入了asp:login控件。我的问题是,这是一个痛苦的实现(创建存储过程,弄乱web.config),它看起来很可怕,因为

我已经建立了一个非常好的登录页面,其中我使用HTML输入标记作为我的用户名、密码和登录按钮。我有两种不同的登录表单,每种类型的用户(学生用户和业务用户)一种。我从未对数据库进行过身份验证,因此我认为我的方法很容易执行。在网上搜寻了一些简单的方法来实现我已经拥有的东西之后,我发现如果不使用
asp:login
控件,我几乎不可能想出如何实现我的目标。我不情愿地放弃了我所拥有的,并加入了
asp:login
控件。我的问题是,这是一个痛苦的实现(创建存储过程,弄乱web.config),它看起来很可怕,因为它不符合我以前编写的CSS,我使用的FormsAuthentication只允许我在登录后重定向一个用户(成功登录后返回主页门户,登录失败后返回登录页面。)使用my Web.config中的身份验证表单模式:

<forms defaultUrl="~/InteriorStudentPortal.aspx" loginUrl="~/ExteriorLogin.aspx" slidingExpiration="true" timeout="2880"></forms>
连同背面代码:

Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.Web.Security

Partial Class ExteriorLogin
    Inherits System.Web.UI.Page

    Protected Sub ValidateStudent(sender As Object, e As AuthenticateEventArgs) Handles Login1.Authenticate
        Dim studentId As Integer = 0
        Dim constr As String = ConfigurationManager.ConnectionStrings("DatabaseConnectionString").ConnectionString

            Using con As New SqlConnection(constr)
                Using cmd As New SqlCommand("Validate_Student")
                    cmd.CommandType = CommandType.StoredProcedure
                    cmd.Parameters.AddWithValue("@Username", Login1.UserName)
                    cmd.Parameters.AddWithValue("@Password", Login1.Password)
                    cmd.Connection = con
                    con.Open()
                studentId = Convert.ToInt32(cmd.ExecuteScalar())
                    con.Close()
                End Using
            Select Case studentId
                Case -1
                    Login1.FailureText = "Username and/or password is incorrect."
                    Exit Select
                Case -2
                    Login1.FailureText = "Account has not been activated."
                    Exit Select
                Case Else
                    FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet)
                    Exit Select
            End Select
            End Using
    End Sub
End Class
我的目标是继续使用
asp:login
控件,并找出如何在登录后允许多个用户重定向……或者最好是,在不使用
asp:login
的情况下进行身份验证,并使用我原来的HTML和CSS。以下是我在使用asp控件之前所做的:

    <%-- STUDENT LOGIN --%>
    <div class="student_login">
        <div id="wrapper">

    <form name="login-form" class="login-form" action="" method="post">

        <div class="header">
        <h1>Student Login</h1>
        <span>Sign in below to login to start showing your skills, earning money, and gaining valuable experience...and did I mention earning MONEY.</span>
        </div>

        <div class="content">
        <input name="username" type="text" class="input username" placeholder="Username" />
        <input name="password" type="password" class="input password" placeholder="Password" /> 
        </div>

        <div class="footer">
        <input type="submit" name="submit" value="Login" class="button" />
        <a href="ExteriorStudentTestimonials.aspx#register" class="register">Register</a>
        </div>

    </form>

</div>
    </div><!--close student_login--> 

学生登录
在下面登录,开始展示你的技能、挣钱和获得宝贵经验……我提到过挣钱吗。

注意:这段代码是在内容占位符中编写的。母版页确实有一个
标记包含在页面正文中。我没有此特定方法的任何后台代码,因为我确实不知道如何在不使用
asp:login
控件和
FormsAuthentication
的情况下进行身份验证。是否可以继续e请帮助我了解如何在没有
asp:login的情况下完成身份验证,这样我就可以保留我精心设计的登录表单?请慷慨或友好地给出评论/解释,这是我的第一个登录表单,所以我没有这样做的经验。

您可以使用
login
c的
LayoutTemplate
控制做你想做的事

诀窍在于,您需要使用一个带有FailureText的
ID
Literal
,用户字段是一个带有用户名的
ID
TextBox
,另一个带有密码的
ID
TextBox

您还需要触发一个
登录
命令,该命令可以是一个
按钮

这允许您自定义自己的布局,我自己也做过几次。下面是一个未经测试的快速复制/粘贴版本,以您的HTML为例

请参阅MSDN参考,网址为


不得不对CSS进行一点重构,但经过一些小的修改后,效果非常好。谢谢。
    <%-- STUDENT LOGIN --%>
    <div class="student_login">
        <div id="wrapper">

    <form name="login-form" class="login-form" action="" method="post">

        <div class="header">
        <h1>Student Login</h1>
        <span>Sign in below to login to start showing your skills, earning money, and gaining valuable experience...and did I mention earning MONEY.</span>
        </div>

        <div class="content">
        <input name="username" type="text" class="input username" placeholder="Username" />
        <input name="password" type="password" class="input password" placeholder="Password" /> 
        </div>

        <div class="footer">
        <input type="submit" name="submit" value="Login" class="button" />
        <a href="ExteriorStudentTestimonials.aspx#register" class="register">Register</a>
        </div>

    </form>

</div>
    </div><!--close student_login--> 
<asp:Login ID="Login1" runat="server"
    OnAuthenticate="ValidateStudent"
    Width="100%">
    <LayoutTemplate>
        <div class="student_login">
            <div id="wrapper">
                <asp:Literal ID="FailureText" runat="server"></asp:Literal>
                <asp:ValidationSummary ID="vsLogin" runat="server" ValidationGroup="Login" />
                <div class="header">
                    <h1>Student Login</h1>
                    <span>Sign in below to login to start showing your skills, earning money, and gaining valuable experience...and did I mention earning MONEY.</span>
                </div>

                <div class="content">
                    <asp:TextBox id="UserName" runat="server" CssClass="input username" placeholder="Enter your username"></asp:TextBox>
                    <asp:RequiredFieldValidator id="rfvUserName" runat="server"
                        ControlToValidate="UserName"
                        Display="None"
                        ErrorMessage="Username is required"
                        ValidationGroup="Login">
                    </asp:RequiredFieldValidator>

                    <asp:TextBox id="Password" runat="server" CssClass="input password" TextMode="Password" placeholder="Password"></asp:TextBox>
                    <asp:RequiredFieldValidator id="rfvPassword" runat="server"
                        ControlToValidate="Password"
                        Display="None"
                        ErrorMessage="Password is required"
                        ValidationGroup="Login">
                    </asp:RequiredFieldValidator>
                </div>

                <div class="footer">
                    <asp:Button ID="Login" runat="server" CommandName="Login" CssClass="button" Text="Login" ValidationGroup="Login" />
                    <a href="ExteriorStudentTestimonials.aspx#register" class="register">Register</a>
                </div>
            </div>
        </div>
    </LayoutTemplate>
</asp:Login>