Asp.net在执行表单操作之前检查数据库

时间:2014-10-11 03:11:59

标签: c# asp.net database validation

我开始使用Asp.net了解C# Visual Studio。我正在创建一个simple Login Form,我有一点问题。我已经google了,但我找不到答案所以我想在这里试试也许我能找到一个。

问题是当我提交表单按钮时,它应该验证输入是否在数据库中找到。如果找到输入,则应执行表单操作,否则不执行任何操作。


LoginForm.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LoginForm.aspx.cs" Inherits="MajelFinals.LoginForm" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server" action="Success.aspx" lang="en" method="post" 
    name="frmLogin" submitdisabledcontrols="False">
    <div style="height: 252px">

        Login Form<br />
        <br />
        User ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:TextBox ID="txtUserID" runat="server"></asp:TextBox>
&nbsp;&nbsp;&nbsp;
        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
            ControlToValidate="txtUserID" ErrorMessage="* Required Input" 
            Font-Size="X-Small" ForeColor="Red"></asp:RequiredFieldValidator>
        <br />
        <br />
        Password&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
&nbsp;&nbsp;&nbsp;
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
            ControlToValidate="txtPassword" ErrorMessage="* Required Password" 
            Font-Size="X-Small" ForeColor="Red"></asp:RequiredFieldValidator>
        <br />
        <br />
        <asp:Button ID="btnSignIn" runat="server" onclick="signIn_Click" 
            Text="Sign In" />

    </div>
    </form>
</body>
</html>

LoginForm.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ProjectProject
{
    public partial class LoginForm : System.Web.UI.Page
    {
        private Login login;

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void signIn_Click(object sender, EventArgs e)
        {
            UserLogin user = new UserLogin();
            user.userID = txtUserID.Text;
            user.userPass = txtPassword.Text;

            if (login.validateEntry(user)) //CHECKING IF FOUND IN THE DATABASE
            {
                   // CONTINUE
            }
            //STAY
        }
    }
}

1 个答案:

答案 0 :(得分:1)

在处理登录时,您通常有多种选择 通常在尝试log-in时,登录成功后,用户重定向到另一个表单。 您可以使用(read more here)

 Response.Redirect("you page to process user actions, etc");

或更好(Read more here),

 Server.Transfer("YourPage.aspx", true);  

然后按照您的意愿执行,通常在此步骤中,您需要准备一个会话,以便在您重定向的那些页面中,您可以在登录用户和意外(或故意)的某个人之间做出改变)试图在没有登录的情况下查看内容 在这种情况下,只要一个人输入错误的登录凭证,他就会停留在登录页面。

您也可以使用会话并避免重定向,并通过该会话知道何时进行合法操作 这意味着当用户输入有效的用户名或密码时,您为其创建会话,并刷新页面,在page_load,您检查当前用户的会话是否存在以及执行任何操作需要做的 会话示例:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (HttpContext.Current.Session["ID"]!= null )
        {
            lblmsg.Text = "You are loged in";
        }
    }

    Dictionary<string, string> db = new Dictionary<string, string>(){
        {"Ali","XXX"},
        {"Alex","YYY"},
        {"Mina","zzz"},
        {"Admin","123"}
    };
    protected void Button1_Click(object sender, EventArgs e)
    {
       //simulating your database search
        if (db.Contains(new KeyValuePair<string,string>( txtBoxUser.Text,txtBoxPassword.Text)))
        {
            HttpContext.Current.Session["ID"] = txtBoxUser.Text;            
        }else
        {
            lblmsg.Text = "Not Logged in ";
        }
    }

您还可以尝试使用postget方法向同一页面发送一些信息,向同一页面发出有关有效登录的信号(post更多信息安全,但我不会为此目的推荐它 当用户输入有效的用户名和密码时,您可以将其ID(或其他一些只知道如何创建和阅读的神秘信息,以避免被其他用户模拟)发送回此页面。
在page_load上再次注意这一点,如果找到有效值,您就知道您已成功登录,然后您可以继续执行您需要执行的操作。
为了使其工作,您还需要有一个会话或提供一些模拟页面的一个或每个方法或部分需要身份验证的机制,需要使用这种方法,这在我的操作中很麻烦且不实用。

对于POST方法,请参阅this
我建议使用会话以及重定向到另一个页面。