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

本文关键字:检查 数据库 操作 表单 net 执行 Asp | 更新日期: 2023-09-27 18:26:10

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

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


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>

登录表单.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
        }
    }
}

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

在处理登录时通常有多种选择
通常,当尝试log-in时,成功登录后,用户会被重定向到另一个表单。你可以使用(阅读更多):

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

或者更好(点击此处阅读更多),

 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方法,请参阅:
我建议在重定向到另一个页面的同时使用会话。