控制器和视图数据交互的实战:实现用户登录
我们学习了控制器和视图后,接下来我们一起学习结合模型,实现MVC的联动操作。
创建数据库,库名ShoppingTest:
步骤一:打开SQL Server,对数据库右键,选择新建数据库,按着下图操作:
步骤二:创建用户表user,流程如下:
注意的是:创建的表id是主键,需要右键设置。以及设置id为标识列(可以实现自动累加id值)
对id右键“属性”设置id为标识列。
最后按ctrl+s保存表,表名命名为user。
步骤三:刷新表,才能看到表在这里。
步骤四:对user表右键,编辑前20条数据。
打开得到下图的表结构,再添加数据到表中。
相关的数据库文件将会贴在最后,可以根据自己的情况选择下载。
在项目中的Models使用数据库对象
步骤一:对Models文件夹右键新建项,然后按下面的步骤设置EF对象,对象里面的命名需要为数据库的库名。
步骤二:选择第一个再下一步。
步骤三:选择新建数据库
步骤四:配置数据库信息
结果如下:
步骤五:选择表结构:
使用表结构:
得到下面结果代表成功:
控制器的登录方法创建:
LoginController.cs新增方法代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using FirstProject.Models; //先使用模型命名空间 namespace FirstProject.Controllers { public class LoginController : Controller { //数据库访问对象 private ShoppingTestEntities db = new ShoppingTestEntities(); //新增登录页 public ActionResult indexback() { return View(); } //通过方法参数接收视图数据时,不会区分是POST请求还是GET请求,都可以获取参数 [HttpPost] public ActionResult indexback(string username,string pwd) { //1、数据校验 if (string.IsNullOrEmpty(username)) { ViewBag.error = "用户名不能为空!"; }else if (string.IsNullOrEmpty(pwd)) { ViewBag.error = "密码不能为空!"; } else { //2、数据都不为空时,直接操作访问数据库查询用户信息 user u = db.user.FirstOrDefault(p=>p.username == username && p.pwd == pwd); if(u == null) { ViewBag.error = "用户名或密码错误!"; } else { //登录成功 =》 跳转到Home/UserList 展示用户列表 return Redirect("/Home/UserList"); } } return View(); } } }
需要注意的是,上面代码需要自己补充到LoginController.cs才能运行。
对应的视图代码indexback.cshtml代码如下:
@{ ViewBag.Title = "用户登录"; } <h2>用户登录</h2> <div class="row"> <div class="col-lg-12"> <form action="" method="post"> <p> 用户名: <input type="text" name="username" value="" /> </p> <p> 密码: <input type="password" name="pwd" value="" /> </p> <p> <input type="submit" name="name" value="登录" /> </p> <p style="color:red;"> @ViewBag.error </p> </form> </div> </div>
运行效果:
登录失败:
登录成功:
这节课就到此结束了,自己尝试的按上面的要求练习如何创建数据库,添加Models对象,最后实现控制器的创建、视图页面的添加、实现登录操作吧!
附件:数据库SQL脚本的代码,直接复制过去到SQL Server执行即可得到结果。
USE [master] GO /****** Object: Database [ShoppingTest] Script Date: 2023/4/10 16:35:16 ******/ CREATE DATABASE [ShoppingTest] ON PRIMARY ( NAME = N'ShoppingTest', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\ShoppingTest.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB ) LOG ON ( NAME = N'ShoppingTest_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\ShoppingTest_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB ) GO IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) begin EXEC [ShoppingTest].[dbo].[sp_fulltext_database] @action = 'enable' end GO ALTER DATABASE [ShoppingTest] SET ANSI_NULL_DEFAULT OFF GO ALTER DATABASE [ShoppingTest] SET ANSI_NULLS OFF GO ALTER DATABASE [ShoppingTest] SET ANSI_PADDING OFF GO ALTER DATABASE [ShoppingTest] SET ANSI_WARNINGS OFF GO ALTER DATABASE [ShoppingTest] SET ARITHABORT OFF GO ALTER DATABASE [ShoppingTest] SET AUTO_CLOSE OFF GO ALTER DATABASE [ShoppingTest] SET AUTO_SHRINK OFF GO ALTER DATABASE [ShoppingTest] SET AUTO_UPDATE_STATISTICS ON GO ALTER DATABASE [ShoppingTest] SET CURSOR_CLOSE_ON_COMMIT OFF GO ALTER DATABASE [ShoppingTest] SET CURSOR_DEFAULT GLOBAL GO ALTER DATABASE [ShoppingTest] SET CONCAT_NULL_YIELDS_NULL OFF GO ALTER DATABASE [ShoppingTest] SET NUMERIC_ROUNDABORT OFF GO ALTER DATABASE [ShoppingTest] SET QUOTED_IDENTIFIER OFF GO ALTER DATABASE [ShoppingTest] SET RECURSIVE_TRIGGERS OFF GO ALTER DATABASE [ShoppingTest] SET DISABLE_BROKER GO ALTER DATABASE [ShoppingTest] SET AUTO_UPDATE_STATISTICS_ASYNC OFF GO ALTER DATABASE [ShoppingTest] SET DATE_CORRELATION_OPTIMIZATION OFF GO ALTER DATABASE [ShoppingTest] SET TRUSTWORTHY OFF GO ALTER DATABASE [ShoppingTest] SET ALLOW_SNAPSHOT_ISOLATION OFF GO ALTER DATABASE [ShoppingTest] SET PARAMETERIZATION SIMPLE GO ALTER DATABASE [ShoppingTest] SET READ_COMMITTED_SNAPSHOT OFF GO ALTER DATABASE [ShoppingTest] SET HONOR_BROKER_PRIORITY OFF GO ALTER DATABASE [ShoppingTest] SET RECOVERY FULL GO ALTER DATABASE [ShoppingTest] SET MULTI_USER GO ALTER DATABASE [ShoppingTest] SET PAGE_VERIFY CHECKSUM GO ALTER DATABASE [ShoppingTest] SET DB_CHAINING OFF GO EXEC sys.sp_db_vardecimal_storage_format N'ShoppingTest', N'ON' GO USE [ShoppingTest] GO /****** Object: Table [dbo].[user] Script Date: 2023/4/10 16:35:16 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[user]( [id] [int] IDENTITY(1,1) NOT NULL, [username] [varchar](50) NOT NULL, [pwd] [varchar](50) NOT NULL, [power] [smallint] NOT NULL, [nickname] [varchar](50) NOT NULL, CONSTRAINT [PK_user] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET IDENTITY_INSERT [dbo].[user] ON INSERT [dbo].[user] ([id], [username], [pwd], [power], [nickname]) VALUES (1, N'123', N'123', 1, N'王虎') INSERT [dbo].[user] ([id], [username], [pwd], [power], [nickname]) VALUES (2, N'1232', N'12345', 0, N'陈明') INSERT [dbo].[user] ([id], [username], [pwd], [power], [nickname]) VALUES (3, N'1231', N'1234', 1, N'陈潇') INSERT [dbo].[user] ([id], [username], [pwd], [power], [nickname]) VALUES (4, N'1233', N'12344', 0, N'陈敏') INSERT [dbo].[user] ([id], [username], [pwd], [power], [nickname]) VALUES (5, N'1231', N'12355', 1, N'王明明') SET IDENTITY_INSERT [dbo].[user] OFF GO USE [master] GO ALTER DATABASE [ShoppingTest] SET READ_WRITE GO
需要购买本课才能留言哦~