【ASP.NET MVC】第一个登录页面(8)

news2024/11/19 7:28:17

一、准备工作

先从网上(站长之家、模板之家,甚至TB)下载一个HTML模板,要求一整套的CSS和必要的JS,比如下图:

登录页面的效果是:

首页:

 

利用这些模板可以减少前台网页的设计——拿来主义

网上模板很多,比如HUI:

 SA-ADMIN

 本例用比较简单的《蓝色超市模板》完成用户登录操作。

二、拷贝内容到工程

把CSS、JS和IMG目录拷贝到工程(类似文件拷贝粘贴)

 

 右键拷贝,到工程目录下,右键,粘贴(可另外新建一个目录,也可以简单粘贴到工程根目录)

 效果如下:

 三、功能实现

功能:用户第一次登录 -》 输入用户账号密码 -》 读数据库验证 -》 通过进入首页

补充:

1、登录后的状态应该维持到关闭浏览器(使用Cookie)——后面解决

2、用户信息错误应该有相应提示

解决思路:

1、修改路由(还有其他解决方法),默认为 Login ;

2、收集用户信息,传送到指定Action (POST比较好);

3、控制器读取数据库,验证用户信息,反馈相应的操作。

修改默认路由:

在HOME控制器,添加Login Action:

 

右键添加Login页面:

 

可以测试一下,默认进入登录页面:

 

 删除上面 Login.cshtml的内容,并且粘贴模板中 ,Login.html 内容

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>系统登录 - 超市账单管理系统</title>
    <link rel="stylesheet" href="css/style.css"/>
</head>
<body class="login_bg">
    <section class="loginBox">
        <header class="loginHeader">
            <h1>超市账单管理系统</h1>
        </header>
        <section class="loginCont">
            <form class="loginForm" action="welcome.html">
                <div class="inputbox">
                    <label for="user">用户名:</label>
                    <input id="user" type="text" name="username" placeholder="请输入用户名" required/>
                </div>
                <div class="inputbox">
                    <label for="mima">密码:</label>
                    <input id="mima" type="password" name="password" placeholder="请输入密码" required/>
                </div>
                <div class="subBtn">
                    <input type="submit" value="登录" />
                    <input type="reset" value="重置"/>
                </div>

            </form>
        </section>
    </section>

</body>
</html>

修改CSS路径后,如下:

 这时候,执行功能进入了登录页面:

 页面上添加JS代码收集用户信息(推荐JQUERY,JS和JQUERY在菜鸟学堂有介绍)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>系统登录 - 超市账单管理系统</title>
    <link rel="stylesheet" href="~/css/style.css"/>
    <script src="~/js/jquery.js"></script>
    <script>
        function login() {
            var name = $("#user").val();
            var psw = $("#mima").val();
            $.post("/Home/Login", { id: name, password: psw }, function (data) {
                if (data == "OK")
                    window.location.href = "/Home/Index";
                else
                    alert(data);
            }
            );
        }
    </script>
</head>
<body class="login_bg">
    <section class="loginBox">
        <header class="loginHeader">
            <h1>超市账单管理系统</h1>
        </header>
        <section class="loginCont">
            <form class="loginForm" >
                <div class="inputbox">
                    <label for="user">用户名:</label>
                    <input id="user" type="text" name="username" placeholder="请输入用户名" required/>
                </div>
                <div class="inputbox">
                    <label for="mima">密码:</label>
                    <input id="mima" type="password" name="password" placeholder="请输入密码" required/>
                </div>
                <div class="subBtn">
                    <input type="submit" value="登录" onclick="login()"/>
                    <input type="reset" value="重置"/>
                </div>

            </form>
        </section>
    </section>

</body>
</html>

说明:

1、添加JQUERY  :   <script src="~/js/jquery.js"></script>  ;

2、自定义login的JS函数,来响应按钮登录的点击事件:<input type="submit" value="登录" οnclick="login()"/>

3、登录事件处理:获取用户名+密码两个输入框的内容,利用post方式提交到服务器,获取服务器的反馈,如果是OK,转到index页面,否则弹出反馈信息

后台控制器再添加一个Login(需要与前面的有不同的参数,重载):

        public ActionResult Login()
        {            
            return View();
        }
        [HttpPost]
        public ActionResult Login(string id,string password)
        {
            DataSet set = TestMysql.Query("select * from user where name='"+id+"'");
            if(set.Tables[0].Rows.Count <= 0)
            {
                return Content("无此用户");
            }
            if (set.Tables[0].Rows[0]["psw"].ToString() != password)
            {
                return Content("密码错误");
            }
            return Content("OK");
        }

最后按照Login的方法,修改Index的内容:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>超市账单管理系统</title>
    <link rel="stylesheet" href="~/css/public.css"/>
    <link rel="stylesheet" href="~/css/style.css"/>
</head>
<body>
<!--头部-->
<header class="publicHeader">
    <h1>超市账单管理系统</h1>

    <div class="publicHeaderR">
        <p><span>下午好!</span><span style="color: #fff21b"> Admin</span> , 欢迎你!</p>
        <a href="login.html">退出</a>
    </div>
</header>
<!--时间-->
<section class="publicTime">
    <span id="time">2015年1月1日 11:11  星期一</span>
    <a href="#">温馨提示:为了能正常浏览,请使用高版本浏览器!(IE10+)</a>
</section>
<!--主体内容-->
<section class="publicMian">
    <div class="left">
        <h2 class="leftH2"><span class="span1"></span>功能列表 <span></span></h2>
        <nav>
            <ul class="list">
                <li ><a href="billList.html">账单管理</a></li>
                <li><a href="providerList.html">供应商管理</a></li>
                <li><a href="userList.html">用户管理</a></li>
                <li><a href="password.html">密码修改</a></li>
                <li><a href="login.html">退出系统</a></li>
            </ul>
        </nav>
    </div>
    <div class="right">
        <img class="wColck" src="~/img/clock.jpg" alt=""/>
        <div class="wFont">
            <h2>Admin</h2>
            <p>欢迎来到超市账单管理系统!</p>
			<span id="hours"></span>
        </div>
    </div>
</section>
<footer class="footer">
</footer>
<script src="js/time.js"></script>
<div style="text-align:center;">
<p>更多模板:<a href="http://www.mycodes.net/" target="_blank">源码之家</a></p>
</div>
</body>
</html>

运行结果:

密码错误

 无用户:

 

 正常登录:

 总结:

本例基本上完成了,MVC三者之间的数据交互,其实MVC也没那么神秘,切记把握数据传递的主线来学习将会使学习路线更加清晰!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/826251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【element-ui】form表单初始化页面如何取消自动校验rules

问题描述&#xff1a;elementUI表单提交页面&#xff0c;初始化页面是获取接口数据&#xff0c;给form赋值&#xff0c;但是有时候这些会是空值情况&#xff0c;如果是空值&#xff0c;再给form表单赋值的话&#xff0c;页面初始化时候进行rules校验会不通过&#xff0c;此时前…

【数据结构与算法——TypeScript】数组、栈、队列、链表

【数据结构与算法——TypeScript】 算法(Algorithm)的认识 解决问题的过程中&#xff0c;不仅仅 数据的存储方式会影响效率&#xff0c;算法的优劣也会影响效率 什么是算法&#xff1f; 定义&#xff1a; &#x1f7e2; 一个有限指令集&#xff0c;每条指令的描述不依赖于言语…

一边是计算机就业哀鸿遍野,一边是高考生疯狂涌向计算机专业

在张雪峰推荐的几大专业里&#xff0c;计算机专业是其中之一。近几年&#xff0c;计算机专业报考热度不减&#xff0c;但就业前景却令人堪忧&#xff0c;互联网裁员接二连三&#xff0c;许多码农找不到工作。 一位网友感叹&#xff1a;一边是计算机就业哀鸿遍野&#xff0c;一…

linux系统共享文件夹的创建和使用(VMware )

虚拟机设置共享文件夹 点击设置 点击选项 选择共享文件夹 随便添加一个电脑上的文件夹 虚拟机内打开共享文件夹 打开根目录 打开mnt文件夹 继续点击 最终得到共享文件夹

8Gbps及以上高速信号PCB布线建议

8Gbps及以上高速信号PCB布线建议 —来源&#xff1a;瑞芯微RK3588 PCB设计白皮书 如表1-1所示&#xff0c;RK3588芯片以下接口的信号能工作在8Gbps及以上速率&#xff0c;由于速率很高&#xff0c;PCB布线设计要求会更严格&#xff0c;在“PCBlayout 通用布线规范”的基础上&…

ELK 企业级日志分析系统(ElasticSearch、Logstash 和 Kiabana 详解)

目录 一.ELK简介 1.1ELK的概述 1.2ELK的组成 1.2.1 ElasticSearch 1.2.2 Logstash 1.2.3 Kibana 1.2.4 小总结 1.3可以添加其他组件 1.4filebeat 结合 logstash 带来好处 1.5日志处理的步骤 二.Elasticsearch 2.1Elasticsearch概述 2.2Elasticsearch核心概念 2.2.1接近…

利用尺度因子方法恢复GRACE水储量变化

1.背景 重力恢复与气候实验&#xff08;GRACE&#xff09;观测地球重力势的时间变化。在考虑了大气和海洋效应后&#xff0c;每月到年际尺度上剩余的信号主要与陆地水储存&#xff08;TWS&#xff09;的变化有关。水储存变化的估计受到测量误差和噪声的信号退化影响&#xff0…

windows美化任务栏,不使用软件

1.任务栏透明: 效果图: (1).winr打开命令行 输入regedit回车打开注册表 regedit (2).在注册表中打开 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced 这个路径 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explore…

目标检测与跟踪 (2)- YOLO V8配置与测试

系列文章目录 第一章 目标检测与跟踪 &#xff08;1&#xff09;- 机器人视觉与YOLO V8 目标检测与跟踪 &#xff08;1&#xff09;- 机器人视觉与YOLO V8_Techblog of HaoWANG的博客-CSDN博客3D物体实时检测、三维目标识别、6D位姿估计一直是机器人视觉领域的核心研究课题&a…

python Pandas.rank() 排名函数详解

文章目录 Pandas.rank() 函数详解一、参数解析二、案例分享默认排名降序: ascending Falsemethod minmethod maxmethod firstmethod densena_optionbottompct True Pandas.rank() 函数详解 一、参数解析 method&#xff1a;指定排名时的策略。 默认值为 average&#x…

论文代码学习—HiFi-GAN(3)——模型损失函数loss解析

文章目录 引言正文生成器损失函数最小二乘损失函数梅尔频谱图损失函数特征匹配损失函数生成器最终损失函数loss生成器loss对应代码 鉴定器损失函数鉴定器损失函数代码 总结引用 引言 这里翻译了HiFi-GAN这篇论文的具体内容&#xff0c;具体链接。这篇文章还是学到了很多东西&a…

P1429 平面最近点对(加强版)

题目 思路 详见加强加强版 代码 #include<bits/stdc.h> using namespace std; #define int long long const int maxn4e510; pair<int,int> a[maxn]; int n; double d1e16; pair<int,int> vl[maxn],vr[maxn]; void read() { cin>>n;for(int i1;i<…

angular2+ 打包信息控制台打印

问题由来&#xff1a;在多人合作进行项目构建的工作环境下&#xff0c;个人完成了某些功能更新到测试环境时&#xff0c;可能会有覆盖他人更新内容的情况&#xff0c;所以这个时候我们就需要知道最后包的版本号&#xff0c;打包人和打包时间&#xff0c;这些信息能够有效的去定…

JVM的组件、自动垃圾回收的工作原理、分代垃圾回收过程、可用的垃圾回收器类型

详细画的图片 https://www.processon.com/diagraming/64c8aa11c07d99075d934311 官方网址 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 相关概念 年轻代是所有新对象被分配和老化的地方。当年轻代填满时&#xff0c;这会导致minor …

Java中支持可变参数详解

Java中支持可变参数详解 意思就是&#xff1a;参数的个数可以根据需要写&#xff0c;你可以写1个、2个、3个、、、、他们都被保存到一个参数的数组中。 但是这些参有一些约束&#xff1a;他们必须是同类型的&#xff0c;比如都是String字符串类型。 同时&#xff0c;可变参数…

jenkins使用gitlab标签发布

关于jenkins git parameter使用gitlab标签发布和分支发布的用法 手动配置的我就不说了&#xff0c;点点点就行&#xff0c;主要是说一下在pipeline里如何使用 通过分支拉取gitlab仓库代码 pipeline {agent anyenvironment {}parameters {gitParameter(branch: , branchFilte…

CAE模拟和分析产品组件CEETRON SDK:提供网格划分、求解、后处理等功能!

Tech Soft 3D经过两年多的时间对VKI&#xff08;Visual Kinematics Inc.&#xff09;和CEETRON&#xff08;Ceetron AS&#xff09;原有的产品线进行代码规整、文档编写和产品重组&#xff0c;发布了全新的CAE产品组件套包CEETRON SDKS。 通过将HOOPS和CEETRON组件进行融合&am…

基于S3存储的笔记应用Notea

什么是 Notea &#xff1f; Notea 是存储在 S3 上的自托管笔记应用程序&#xff0c;Notea 不需要数据库。笔记存储在 AWS S3 存储桶或兼容的 API 中。这意味着您可以使用 MinIO&#xff08;自托管&#xff09;、阿里云 OSS&#xff08;如 AWS S3&#xff09;或 NAS 来存储您的数…

SpringBoot 实现数据加密脱敏(注解 + 反射 + AOP)

SpringBoot 实现数据加密脱敏&#xff08;注解 反射 AOP&#xff09; 场景&#xff1a;响应政府要求&#xff0c;商业软件应保证用户基本信息不被泄露&#xff0c;不能直接展示用户手机号&#xff0c;身份证&#xff0c;地址等敏感信息。 根据上面场景描述&#xff0c;我们…

功率放大器的种类有哪三种类型

功率放大器是一种能将输入信号转换为更高功率输出的电子设备。在电子工程和音频领域中&#xff0c;功率放大器通常被分为三种类型&#xff1a;A类、B类和AB类。下面安泰电子将详细介绍这三种类型的功率放大器及其特点。 A类功率放大器 A类功率放大器是一种基本的线性功率放大器…