Web开发:ASP.NET CORE的前端demo(纯前端)

目录

一、建立项目

二、删除无用文件

三、样式添加

四、写一个登录页面

 五、登录主界面

一、建立项目

二、删除无用文件

三、样式添加

将你的图片资源添加在wwwroot下方,例如pics/logo.png

四、写一个登录页面

将Privacy.cshtml改为 Forget.cshtml ,并且在HomeController中的方法也改一下:

public IActionResult Forget() //点击密码时返回视图
{
   return View();
}

并且在 Forget.cshtml 写下如下代码:

<h1>忘记密码页面</h1>

然后在Index.cshtml中写下如下代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录页面</title>
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <!-- Custom styles -->
    <style>
        body {
            background-color: #f8f9fa;
            font-size: 20px;
        }

        .login-container {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        .login-form {
            max-width: 400px;
            padding: 35px;
            background-color: #fff;
            border-radius: 10px;
            box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.1);
        }

            .login-form h2 {
                text-align: center;
                margin-bottom: 40px;
            }

        .form-group label {
            font-size: 22px;
        }

        .form-control {
            height: 40px;
            font-size: 18px;
            margin-bottom: 20px; /* 增加文本框的下间距 */
        }

        .form-actions {
            display: flex; /* 设置为 Flex 容器 */
            justify-content: flex-end; /* 将子元素对齐到容器的末尾 */
            align-items: center; /* 垂直居中子元素 */
            margin-top: 1rem; /* 添加一些上边距以与表单字段分隔 */
        }

        .btn {
            /* 确保按钮和链接看起来相似,根据需要调整样式 */
            padding: 0.5rem 1rem;
            
            color: white;
            background-color: #007bff;
            border: none;
            border-radius: 0.25rem;
            cursor: pointer;
            margin:20px;
        }

            .btn:hover {
                background-color: #0056b3; /* 悬停效果 */
            }

        .logo {
            width: 120px;
            height: auto;
            display: block;
            margin: 0 auto;
            margin-bottom: 30px;
        }
    </style>
</head>
<body>

    <div class="login-container">
        <div class="login-form">
            <img src="/pics/logo.png" alt="Logo" class="logo">
            <h2>XXX管理系统</h2>
            <form method="post" action="/Home/Index">
                <div class="form-group">
                    <label for="username">账号: </label>
                    <input type="text" class="form-control" id="username" placeholder="请输入您的帐号:" Name="id" >
                </div>
                <div class="form-group">
                    <label for="password">密码: </label>
                    <input type="password" class="form-control" id="password" placeholder="请输入您的密码:" Name="pwd">
                </div>
                <div class="form-actions">
                    <!-- 创建一个新的 div 作为 Flex 容器 -->
                    <button type="submit" class="btn">登录</button>
                    <button type="submit" class="btn" onclick="window.open('/Home/Forget')">忘记密码</button>
                </div>
            </form>
        </div>
    </div>

    <!-- Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>

</body>
</html>

再创建一个控制器和界面(MainController 和 Main/Index): 

(伪)后端 HomeController:

public static bool Loginflag = false;

[HttpPost]
public IActionResult Index(string id,string pwd)
{
    if (pwd!=null && pwd.Equals("123"))
    {
        Loginflag = true;
        return RedirectToAction("Index", "Main");//重定向到MainController下的Index界面
    }
    else
    {
        return View();
    }    
}

(伪)后端 MainController:

public IActionResult Index()
{
    if(HomeController.Loginflag)//如果登录成功
    {
        return View();//打开当前界面
    }
    else
    {
        return RedirectToAction("Index","Home");//重定向到HomeController下的Index界面
    }
}

效果:密码输入为123时,登录成功;点击忘记密码会跳转到忘记密码页面。

 【更好的传入方式】:封装成一个类传入

 五、登录主界面

 (伪)后端 MainController:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    public class MainController : Controller
    {

        public IActionResult Index(int? page, QueryParameters? parameters=null)//QueryParameters类需要自主创建
        {
            if(HomeController.Loginflag)//如果登录成功
            {
                //默认用户名
                ViewBag.UserName = "小明";
                // 获取输入框的查询数据
                string name = parameters?.Name;
                string className = parameters?.ClassName;
                int? age = parameters?.Age;
                string gender = parameters?.Gender;
                bool? under18 = parameters?.Under18;
                #region 模拟数据库查询
                var list = new List<Student>();
                list.Add(new Student { Id=1,Name="小虹",age=18,sex="女",classes="计算机1班"});
                list.Add(new Student { Id = 2, Name = "小明", age = 19, sex = "男", classes = "计算机2班" });
                list.Add(new Student { Id = 3, Name = "小华", age = 17, sex = "女", classes = "计算机3班" });
                list.Add(new Student { Id = 4, Name = "小张", age = 20, sex = "男", classes = "数学1班" });
                list.Add(new Student { Id = 5, Name = "小李", age = 18, sex = "女", classes = "物理2班" });
                list.Add(new Student { Id = 6, Name = "小王", age = 19, sex = "男", classes = "化学3班" });
                list.Add(new Student { Id = 7, Name = "小赵", age = 21, sex = "女", classes = "生物1班" });
                list.Add(new Student { Id = 8, Name = "小陈", age = 17, sex = "男", classes = "英语2班" });
                list.Add(new Student { Id = 9, Name = "小刘", age = 18, sex = "女", classes = "历史3班" });
                list.Add(new Student { Id = 10, Name = "小周", age = 19, sex = "男", classes = "地理1班" });
                list.Add(new Student { Id = 11, Name = "小吴", age = 20, sex = "女", classes = "政治2班" });
                list.Add(new Student { Id = 12, Name = "小郑", age = 17, sex = "男", classes = "语文3班" });
                list.Add(new Student { Id = 13, Name = "小孙", age = 18, sex = "女", classes = "美术1班" });
                list.Add(new Student { Id = 14, Name = "小袁", age = 19, sex = "男", classes = "音乐2班" });
                list.Add(new Student { Id = 15, Name = "小许", age = 20, sex = "女", classes = "体育3班" });
                list.Add(new Student { Id = 16, Name = "小徐", age = 21, sex = "男", classes = "信息1班" });
                #endregion
                int pageSize = 10; // 每页显示的数据量
                int pageNumber = (page ?? 1); // 当前页数,默认为第一页
                ViewBag.CurrentPage = pageNumber;
                ViewBag.TotalPages = (int)Math.Ceiling((double)list.Count / pageSize); // 计算总页数
                ViewBag.ResultList = list.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList(); ;
                return View();//打开当前界面
            }
            else
            {
                return RedirectToAction("Index","Home");//重定向到HomeController下的Index界面
            }
        }
        /// <summary>
        /// 点击修改按钮
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult Index([FromBody] RetunData data)//RetunData类需要自主创建
        {
            int id = data.Id;
            return Ok();  // 返回成功响应
        }
    }
}

Main/Index界面:

<!DOCTYPE html>
<html>
<head>
    <title>导航栏示例</title>
    <style>
        body {
            margin: 0;
            padding: 0;
        }

        .navbar {
            background-color: #007bff;
            color: white;
            padding: 10px;
            margin: 0;
            width: 100%;
            box-sizing: border-box;
        }

        .navbar-items {
            list-style-type: none;
            padding: 0;
            margin: 0;
            width:200px;
            background-color: ghostwhite; /* 您可以根据需要更改背景颜色 */
        }

            .navbar-items li {
                display: block; /* 设置为块级元素,使它们竖着排列 */
                padding: 10px;
            }

                .navbar-items li:hover {
                    background-color: #ddd; /* 鼠标悬停时的背景颜色 */
                    cursor: pointer; /* 鼠标悬停时变为手形图标 */
                }


        th, td {
            border: 1px solid #dddddd;
            text-align: left;
            padding: 8px;
        }

        tr:nth-child(even) {
            background-color: #f2f2f2;
        }
    </style>
</head>
<body>
    <div class="navbar">欢迎您!@ViewBag.UserName</div>
    <ul class="navbar-items" style="text-align: center;">
        <li><a href="#" style="color: inherit; text-decoration: none;">项目1</a></li>
        <li><a href="#" style="color: inherit; text-decoration: none;">项目2</a></li>
        <li><a href="#" style="color: inherit; text-decoration: none;">项目3</a></li>
        <li><a href="#" style="color: inherit; text-decoration: none;">项目4</a></li>
        <li><a href="#" style="color: inherit; text-decoration: none;">项目5</a></li>
    </ul>

    <div style="text-align: center; position: absolute; left:350px; top:70px;">
        <input type="text" id="nameInput" placeholder="姓名" style="margin:10px">
        <input type="text" id="classInput" placeholder="班级" style="margin:10px">
        <input type="text" id="ageInput" placeholder="年龄" style="margin:10px">
        <select id="genderSelect" style="margin:10px">
            <option value="男">男</option>
            <option value="女">女</option>
        </select>
        <input type="checkbox" id="under18Checkbox" style="margin:10px"> 小于18岁
        <button id="refreshButton" type="button" style="background-color: greenyellow; border: none; padding: 5px 10px; cursor: pointer;">刷新查询</button>
        <button type="button" style="background-color: cornflowerblue; border: none; padding: 5px 10px; cursor: pointer;">新增信息</button>
    </div>

    <!-- 列表 -->
    <table style="margin: 20px auto;border-collapse: collapse; position: absolute;left:550px; top:130px;">
        <thead>
            <tr style="margin: 20px auto;">
                <th>姓名</th>
                <th>班级</th>
                <th>年龄</th>
                <th>性别</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in ViewBag.ResultList)
            {
                <tr>
                    <td>@item.Name</td>
                    <td>@item.classes</td>
                    <td>@item.age</td>
                    <td>@item.sex</td>
                    <!-- 继续添加更多字段 -->
                    <td>
                        <button type="button" style="background-color: orange; border: none; padding: 5px 10px; cursor: pointer;" onclick="modifyRecord('@item.Id')">修改</button>
                        <button type="button" style="background-color: #dc143c; border: none; padding: 5px 10px; cursor: pointer;">删除</button>
                    </td>
                </tr>
            }
        </tbody>
    </table>

    <!-- 上一页/下一页按钮以及页码 -->
    <div class="pagination" style="text-align: center;  position: absolute;left:600px; top:650px; margin:5px">
        <button type="button" onclick="location.href='@Url.Action("Index", new { page = ViewBag.CurrentPage - 1 })'" @(ViewBag.CurrentPage == 1 ? "disabled" : "")>上一页</button>
        <span>第 @ViewBag.CurrentPage 页/共 @ViewBag.TotalPages 页 </span>
        <button type="button" onclick="location.href='@Url.Action("Index", new { page = ViewBag.CurrentPage + 1 })'" @(ViewBag.CurrentPage == ViewBag.TotalPages ? "disabled" : "")>下一页</button>
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        // 监听按钮点击事件
        $('#refreshButton').on('click', function () {
            // 获取输入框和选择框的值
            var name = $('#nameInput').val();
            var className = $('#classInput').val();
            var age = $('#ageInput').val();
            var gender = $('#genderSelect').val();
            var under18 = $('#under18Checkbox').is(':checked');

            // 发送Ajax请求
            $.ajax({
                url: '/Main/Index', // 后端处理方法的URL
                method: 'GET', // 使用GET方法发送请求
                data: {
                    name: name,
                    className: className,
                    age: age,
                    gender: gender,
                    under18: under18
                },
                success: function (response) {
                    // 请求成功后的处理逻辑
                    console.log('后端处理成功');
                },
                error: function (xhr, status, error) {
                    // 请求失败后的处理逻辑
                    console.error('后端处理失败:', error);
                }
            });
        });

        function modifyRecord(id) {
            // 创建一个包含ID的对象(POST请求的特点)
            var data = { id: id };

            // 发送POST请求
            $.ajax({
                url: '/Main/Index',  // 根据你的实际路由进行修改
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify(data),
                success: function (response) {
                    // 处理成功响应
                    console.log('Record modified successfully');
                },
                error: function (xhr, status, error) {
                    // 处理错误响应
                    console.error('Error modifying record:', error);
                }
            });
        }
    </script>
</body>
</html>

【效果如下所示】:

当然这只是个demo,很多功能都没有实现,只是写一下前端以及前后端是如何交互的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AJAX——图书管理案例

1.渲染列表 自己的图书数据&#xff1a;给自己起个外号&#xff0c;并告诉服务器&#xff0c;默认会有三本书&#xff0c;基于这三本书做数据的增删改查。 // 目标1&#xff1a;渲染图书列表 // 1.1 获取数据 // 1.2 渲染数据const creator 哈哈 // 封装-获取并渲染图书列表函…

设计模式学习笔记 - 开源实战三(中):剖析Google Guava中用到的设计模式

概述 上篇文章&#xff0c;我通过 Google Guava 这样一个优秀的开源类库&#xff0c;讲解了如何在业务开发中&#xff0c;发现跟业务无关、可以复用的通用功能模块&#xff0c;并将它们抽离出来&#xff0c;设计成独立的类库、框架或功能组件。 本章再来学习下&#xff0c;Go…

[Linux][进程信号][二][信号如何被保存][信号处理][可重入函数]详细解读

目录 1.信号如何被保存&#xff1f;1.信号其他相关常见概念2.信号在内核中的表示3.sigset_t -- 本质是个位图4.信号集操作函数sigset_t&#xff1a;sigprocmask()sigpending() 5.思考6.使用 2.信号处理0.内核态和用户态1.内核空间和用户空间2.信号何时被处理&#xff1f;3.信号…

PSA Group EDI 需求分析

PSA集团&#xff08;以下简称PSA&#xff09;中文名为标致雪铁龙集团&#xff0c;是一家法国私营汽车制造公司&#xff0c;致力于为全球消费者提供独具特色的汽车体验和自由愉悦的出行方案&#xff0c;旗下拥有标致、雪铁龙、DS、欧宝、沃克斯豪尔五大汽车品牌。 汽车制造企业对…

JavaWeb--前端--02JavaScript

JavaScript 1 JavaScript介绍2 引入方式3 基础语法3.1 书写语法3.2 变量3.3 数据类型和运算符 4 JS的函数4.1函数的第一种定义4.2 函数的第二中定义 5 JavaScript对象5.1 基本对象5.1.1 Array对象5.1.2 String对象5.1.3 Json对象 5.2 BOM5.2.1 BOM对象5.2.1 Windows对象5.2.2 L…

c++补充

构造函数、析构函数 #include <iostream> using namespace std;// 构造函数、析构函数 // --- "构造函数"类比生活中的"出厂设置" --- // --- "析构函数"类比生活中的"销毁设置" --- // 如果我们不写这两种函数&#xff0c;编译…

定制k8s域名解析------CoreDns配置实验

定制k8s域名解析------CoreDns配置实验 1. 需求 k8s集群内通过CoreDns互相解析service名. 同时pana.cn域为外部dns解析,需要通过指定dns服务器进行解析 再有3个服务器,需要使用A记录进行解析 2. K8s外DNS服务器 查看解析文件 tail -3 /var/named/pana.cn.zone 解析内容 ww…

STM32G431RBT6之时钟树配置与生成工程

默认大家都下载了蓝桥杯嵌入式资源包了哈. 首先,打开cubumx,修改RCC与SYS. 打开并观察原理图,发现晶振是24Mhz. 第一步,打开Clock Configuration. 第二步,修改晶振为原理图相对应的24Mhz. 第三步,切换到HSE. 第四步,切换到PLLCLK. 第五步,设置HCLK为80Mhz(15届真题要求为8…

【信号处理】基于EEG脑电信号的自闭症预测典型方法实现

理论 自闭者主要受到遗传和环境因素的共同影响。由于自闭症是一种谱系障碍&#xff0c;因此每个自闭症患者都有独特的优势和挑战。自闭症患者学习、思考和解决问题的方式可以是高技能的&#xff0c;也可以是严峻的挑战。研究表明&#xff0c;高质量的早期干预可以改善学习、沟…

Java web应用性能分析之【MySQL安装注意事项】

本文主要是针对以前LAMP&#xff0c;以及默认用apt安装的mysql。数据文件、日志文件都在一起&#xff1b;innodb_buffer_pool默认用128M。如果你排查问题&#xff0c;最后发现是因为mysql的安装配置不对&#xff0c;是否一口老血要喷出来。同时给MySQL数据库安装做参考。 关于M…

ZYNQ NVME高速存储之EXT4文件系统

前面文章分析了高速存储的各种方案&#xff0c;目前主流的三种存储方案是&#xff0c;pcie switch高速存储方案&#xff0c;zynq高速存储方案&#xff0c;fpga高速存储方案。虽然三种高速存储方案都可以实现高速存储&#xff0c;但是fpga高速存储方案是最烂的&#xff0c;fpga…

23.组件注册方式

组件注册方式 一个 Vue 组件在使用前需要先被“注册”&#xff0c;这样 Vue 才能在渲染模板时找到其对应的实现。组件注册有两种方式&#xff1a;全局注册和局部注册 全局注册 import { createApp } from vue import App from ./App.vue import GlobalComponent from ".…

C++三大特性之一:继承

文章目录 前言一、继承方式二、继承类型继承中构造和析构的顺序继承中的内存分配多继承语法(非重点)继承中同名静态成员的处理继承一般在哪里用到进阶&#xff1a;菱形继承和虚拟继承 总结 前言 C三大特性&#xff1a;继承、多态和封装。继承是面向对象编程的一个核心概念&…

实在IDP文档审阅产品导引

实在IDP文档审阅&#xff1a;智能文档处理的革新者 一、引言 在数字化转型的浪潮中&#xff0c;文档处理的智能化成为企业提效的关键。实在智能科技有限公司推出的实在IDP文档审阅&#xff0c;是一款利用AI技术快速理解、处理文档的智能平台&#xff0c;旨在为企业打造专属的…

在PostgreSQL中如何进行全文搜索,以及如何优化全文搜索性能?

文章目录 如何进行全文搜索1. 创建全文搜索向量2. 执行全文搜索查询 如何优化全文搜索性能1. 使用GIN索引2. 限制搜索范围3. 优化文本处理4. 使用并发搜索5. 监控和调整配置 在PostgreSQL中&#xff0c;全文搜索通常通过使用tsvector和tsquery类型&#xff0c;以及to_tsvector和…

2024第十五届蓝桥杯 C/C++ B组 参赛经历分享(以及部分题解)

前言 emmmmmm&#xff0c;dp杯居然不考dp了&#xff0c;蓝桥一直没怎么出过的高精度居然也考了&#xff08;当时居然因为没太复习那块知识直接模拟混分了&#xff09;&#xff0c;题量也改了&#xff0c;总的来说反而简单了&#xff1f;。。。还好天津竞赛弱省&#xff0c;但愿…

使用HTML和CSS和PHP实现一个简单的简历制作项目

实 验 目 的 掌握HTML表单作用&#xff0c;以及action和method属性&#xff1b; 掌握HTML输入域作用、类型、标签&#xff0c;以及name和value属性&#xff1b; 掌握$_REQUEST变量的作用、语法和使用&#xff1b; 掌握注释&#xff0c;以及变量的作用、命名、赋值和输出&#…

交换机端口类型——操控vlan tag

拓扑图 按照上图vlan及端口类型&#xff0c;操控vlan标签&#xff0c;实现PC1、PC2、PC3互通。 配置 sysname SW1 # vlan 10 # interface GigabitEthernet0/0/1port link-type accessport default vlan 10 # interface GigabitEthernet0/0/24port link-type accessport defaul…

【新版】小剧场短剧影视小程序源码

风口项目 &#xff0c;短剧app 小程序 H5 多端程序 全网首家对接了易支付&#xff0c; 修复了众多BUG 目前已知BUG全部修复 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89070544 更多资源下载&#xff1a;关注我。

redhatcsa学习笔记--题目+答案

一、semanage命令 semanage命令 – 查询与修改安全上下文 semanage命令来自英文词组“SELinux manage”的缩写&#xff0c;其功能是用于查询与修改安全上下文。semanage的功能类似于chcon命令&#xff0c;它们都可以用于设置文件的SELinux安全上下文策略&#xff0c;而semana…