MVC基础——市场管理系统(二)


文章目录

  • 项目地址
  • 三、Produtcts的CRUD
    • 3.1 Products列表的展示页面(Read)
      • 3.1.1 给Product的Model里添加Category的属性
      • 3.1.2 View视图里展示Product List
    • 3.2 增加Product数据(Add)
      • 3.2.1 创建ViewModel用来组合多个Model
      • 3.2.2 在_ViewImposts里引入ViewModels
      • 3.2.3 添加Add的Action逻辑
      • 3.2.4 添加Add的视图
    • 3.3 编辑Product数据(Edit)
      • 3.3.1 创建Edit的Get请求的Action
      • 3.3.2 创建Edit的Post请求的Action
  • 四、Cashier Console的实现
    • 4.1创建Cashier的Index页面
      • 4.1.1 创建ViewModel
      • 4.1.2 创建Index页面的商品类的Action
      • 4.1.3 创建Index的view视图页面
    • 4.2 创建Cashier Index页面里的product展示
      • 4.2.1 product的controller里添加partial action用来分块展示商品
        • 1. 在ProductRepository里添加查询方法
      • 4.2.2 在Product的视图里添加商品表格的视图
      • 4.2.3 将上面的Partial View整合到Index页面里
        • 1. 将jquery的脚本添加到Layout页面
        • 2. 在Sales的Index视图里,使用jq引入product的partial view
    • 4.3 展示详细的商品信息
      • 4.3.1 点击商品Table实现行高亮
        • 1. 给需要高亮的地方,添加一个类名
        • 2. 静态文件里添加高亮样式
        • 3. 添加jq方法,显示高亮
      • 4.3.2 高亮之后,显示商品的详情
        • 1.获取商品的id
        • 2. 添加显示商品详请功能
    • 4.4 Sales Fom 页面
      • 4.4.1 添加Sales Form的视图
        • 1. 修改SalesViewModel
        • 2. 创建form的视图
        • 3. 只有选择商品后才显示表单
        • 4. 自定义验证,验证输入数量是否大于库存
      • 4.4.2 提交数量后,计算和出库并且展示最新信息
        • 1. 添加Transaction的Model
        • 2. 完善sell Action的功能
        • 3. 创建ViewComponent
    • 4.5 Trasactions 页面
      • 4.5.1 Trasactions的ViewModel创建
      • 4.5.2 controller里创建get请求的Action
      • 4.5.3 创建Get请求的视图
      • 4.5.4 创建Search的Action


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:

三、Produtcts的CRUD

  1. 创建Product的Model
  2. 创建ProductRepository

3.1 Products列表的展示页面(Read)

3.1.1 给Product的Model里添加Category的属性

  1. 修改ProductRepository.cs里的获取所有products的方法,根据是否有CategoryId来判断,查询出有Id的产品的Category类

在这里插入图片描述
2. 修改,查询单个product的方法,同样根据是否有id,来查询

public static Product? GetProductById(int productId,bool loadCategory = false)
{var product = _products.FirstOrDefault(x => x.ProductId == productId);if (product != null){var prod =  new Product{ProductId = product.ProductId,Name = product.Name,Quantity = product.Quantity,Price = product.Price,CategoryId = product.CategoryId};if (loadCategory && product.CategoryId.HasValue){prod.Category = CategoriesRepository.GetCategoryById(product.CategoryId.Value);}}return null;
}

3.1.2 View视图里展示Product List

  • 前端通过Product.Category.Name就可以获取Category 的Name属性

在这里插入图片描述

3.2 增加Product数据(Add)

  • 在Add的页面里,我们需要展示所有Category的分类在下拉框里,所以这个页面里面需要两个类,分别是Product和Category

在这里插入图片描述

3.2.1 创建ViewModel用来组合多个Model

  • 根目录下创建一个ViewModel的文件夹,并且创建ProductCategoryViewModel.cs ,并且给出默认值;
using WebApp.Models;namespace WebApp.ViewModels
{public class ProductCategoryViewModel{public List<Category> Categories { get; set; } = new List<Category>();public Product Product { get; set; } = new Product();   }
}

3.2.2 在_ViewImposts里引入ViewModels

  • 需要在_ViewImposts.cshtml里引入添加ViewModels,不然页面无法使用
@using WebApp;
@using WebApp.Models;
@using WebApp.ViewModels;
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

3.2.3 添加Add的Action逻辑

  • ProductsController.cs 里添加逻辑
  1. Add的Get请求的Action
    在这里插入图片描述
  2. Add的Post请求的Action

在这里插入图片描述

3.2.4 添加Add的视图

  • 引入ViewMoldes,该ViewModels,包含两个类Product和Category
@model ProductCategoryViewModel
  • 添加下拉选项

在这里插入图片描述

3.3 编辑Product数据(Edit)

3.3.1 创建Edit的Get请求的Action

  1. Product的Index页面,将ProductId传递给edit 的action
 <a class="btn btn-warning col-3 d-inline" asp-controller="products" asp-action="edit" /asp-route-id="@product.ProductId">Edit</a>
  1. 创建Edit 的get请求的action

在这里插入图片描述

3.3.2 创建Edit的Post请求的Action

  • 需要注意的是:Update的传参需要①通过product.CategoryId.Value获取可空类型的值,如果该值是空,则报错;②传递一个
[HttpPost]
public IActionResult Edit(ProductCategoryViewModel productCategoryViewModel)
{if (ModelState.IsValid){ProductsRepository.UpdateProduct(productCategoryViewModel.Product.ProductId, productCategoryViewModel.Product);return RedirectToAction("Index");}productCategoryViewModel.Categories = CategoriesRepository.GetCategories();return View(productCategoryViewModel);
}

四、Cashier Console的实现

4.1创建Cashier的Index页面

4.1.1 创建ViewModel

  • 在ViewModels文件夹下,创建SalesViewModel.cs,主要作用是,设置一个 用户传递选择的CategoryId和一个商品列表
using WebApp.Models;namespace WebApp.ViewModels
{public class SalesViewModel{public int SelectedCategoryId { get; set; }public List<Category> Categories { get; set; } = new List<Category>();}
}

4.1.2 创建Index页面的商品类的Action

  • SalesController.cs里面添加商品类别选择的Action,由于他只是展示一个下拉选项框,所以直接使用Get请求的Action;
  • 从CategoiresRepository里读取到商品类别的列表,并且实例化,返回给视图
public IActionResult Index()
{var salesViewModel = new SalesViewModel{Categories = CategoriesRepository.GetCategories()};return View(salesViewModel);
}

4.1.3 创建Index的view视图页面

  • 创建上面的页面的视图页面,展示下拉框,以及用占位
    将为完成的部分占位

在这里插入图片描述

4.2 创建Cashier Index页面里的product展示

  • 由于Cashier index页面里有:
    1. 所有商品类别的下拉框
    2. 根据商品类别选择后的所有商品列表

所以,需要使用partial view分别或者试图,然后拼接在一起

  • 效果展示:
    在这里插入图片描述

4.2.1 product的controller里添加partial action用来分块展示商品

  • 由于我们是需要从product的模型里读取商品的信息,所以partial view应该放入到ProductsController.cs里;
  • 添加一个Action

在这里插入图片描述

1. 在ProductRepository里添加查询方法
  • ProductsRepository.cs里,添加GetProductsByCategory()方法,用来根据CategortId 查询出来所有的商品
 public static List<Product> GetProductsByCategory(int categoryId){var products = _products.Where(x => x.CategoryId == categoryId).ToList();if (products != null){return products;}else{return new List<Product>();}}

4.2.2 在Product的视图里添加商品表格的视图

  • 只是一个商品表格展示的视图,在Product的视图里添加_ProductTble.cshtml,该视图只是整个页面的一个组件
@model List<Product>@if(Model !=null && Model.Count > 0)
{<table class="table table-bordered table-striped"><thead><tr><th

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vivado中,generate output product 和Create HDL wrapper的作用

generate output product 以zynq的ip核举例&#xff0c;没有generate output product之前&#xff0c;在ip source 什么也看不到。 但是同样的一个ip核&#xff0c;generate output product之后&#xff0c;会生成综合&#xff0c;布线和仿真文件&#xff0c;约束文件等等。 …

uni-app 组成和跨端原理 【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

双目相机的标定,视差图,深度图,点云生成思路与实现。

该文档记录从双目相机标定到点云生成的所有过程&#xff0c;同时会附上代码。 代码直接能跑。https://github.com/stu-yzZ/stereoCamera 目录 大致思路如下&#xff1a; 一、相机标定 1、相机参数介绍 2、单目相机标定 3、双目相机标定 二、图片畸变矫正 三、极线矫正…

Selenium:强大的 Web 自动化测试工具

Selenium&#xff1a;强大的 Web 自动化测试工具 在当今的软件开发和测试领域&#xff0c;自动化工具的重要性日益凸显。Selenium 就是一款备受欢迎的 Web 自动化测试工具&#xff0c;它为开发者和测试人员提供了强大的功能和便利。本文将详细介绍 Selenium 是什么&#xff0c…

基于 Spring Boot + Vue 的宠物领养系统设计与实现

引言 近年来&#xff0c;随着人们生活水平的提高&#xff0c;宠物逐渐成为许多家庭的重要成员。然而&#xff0c;宠物的流浪和弃养问题日益严重&#xff0c;这促使社会对宠物领养的需求不断增长。为解决宠物领养中信息不对称、领养流程复杂等问题&#xff0c;设计并实现一个基…

佑驾创新冲刺上市:交付进度延后,研发投入缩减,刘国清为实控人

近日&#xff0c;深圳佑驾创新科技股份有限公司&#xff08;MINIEYE&#xff0c;下称“佑驾创新”&#xff09;通过港交所聆讯并披露了聆讯后资料集&#xff08;即招股书&#xff09;。据贝多财经了解&#xff0c;佑驾创新获得了IPO备案通知书&#xff0c;拟在港交所上市。 对…

JS中的原型链与继承

原型链的类比 JS中原型链&#xff0c;本质上就是对象之间的关系&#xff0c;通过protoype和[[Prototype]]属性建立起来的连接。这种链条是动态的&#xff0c;可以随时变更。 这个就跟C/C中通过指针建立的关系很相似&#xff0c;比如&#xff0c;通过指针建立一个链表&#xf…

数据结构——图(遍历,最小生成树,最短路径)

目录 一.图的基本概念 二.图的存储结构 1.邻接矩阵 2.邻接表 三.图的遍历 1.图的广度优先遍历 2.图的深度优先遍历 四.最小生成树 1.Kruskal算法 2.Prim算法 五.最短路径 1.单源最短路径--Dijkstra算法 2.单源最短路径--Bellman-Ford算法 3.多源最短路径--Floyd-…

华为云云日志服务 HarmonyOS NEXT采集最佳实践

鸿蒙背景介绍 华为鸿蒙HarmonyOS系统是面向万物互联的全场景分布式操作系统&#xff0c;支持手机、平板、智能穿戴、智慧屏等多种终端设备运行&#xff0c;提供应用开发、设备开发的一站式服务的平台。2024 年 1 月 18 日正式推出 HarmonyOS NEXT 鸿蒙星河开发者预览&#xff…

在Ubuntu上使用IntelliJ IDEA:开启你的Java开发之旅!

你好&#xff0c;年轻的学徒&#xff01;&#x1f9d1;‍&#x1f4bb; 是时候踏上进入Java开发世界的史诗之旅了&#xff0c;我们的得力助手将是强大的IntelliJ IDEA。准备好了吗&#xff1f;出发吧&#xff01; 在我们开始之前&#xff0c;我们需要下载这个工具。但是&#…

图片预处理技术介绍4——降噪

图片预处理 大家好&#xff0c;我是阿赵。   这一篇将两种基础的降噪算法。   之前介绍过均值模糊和高斯模糊。如果从降噪的角度来说&#xff0c;模糊算法也算是降噪的一类&#xff0c;所以之前介绍的两种模糊可以称呼为均值降噪和高斯降噪。不过模糊算法对原来的图像特征的…

基础算法--双指针

两数之和 点击&#xff1a;题目链接 解法一&#xff1a;暴力解法 时间复杂度&#xff1a;O(N^2) 算法思路&#xff1a;两层for循环即可列出所有两个数字的组合&#xff0c;判断是否等于目标值 算法流程&#xff1a; 两层 for 循环&#xff1a; 外层 for 循环依次枚举第⼀个…

WPF+LibVLC开发播放器-音量控制和倍速控制

界面 界面上增加音量的控件和倍速控制控件 音量控制 主要也是一个Slider进度条控件来实现音量调节 我们这里设置默认的最大值为100&#xff0c;默认Value值也为100&#xff0c;默认声音开到最大 这里目前完全由前端控制音量调节&#xff0c;可以直接使用ValueChanged事件实…

【C语言练习(3) —水仙花数判断】

系列文章目录 文章目录 系列文章目录前言题目解题思路结果总结与反思 前言 通过水仙花数巩固之前学习知识点&#xff0c;锻炼自己的写敲代码能力&#xff0c;只有写才能发现问题、找问题、解决问题 题目 求出所有5位数中的所有水仙花数&#xff08;Lily Number&#xff09;&a…

【专题】2024年11月新能源汽车、智能汽车行业报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p38520 随着科技的飞速发展与社会的持续变革&#xff0c;新能源汽车与智能汽车行业正步入全新的发展阶段&#xff0c;成为全球瞩目的焦点领域。本报告深入且全面地剖析了 2024 年 11 月该行业的多方面状况。从汽车消费市场来看&#…

【C++图论 BFS算法】2467. 树上最大得分和路径|2053

本文涉及知识点 C图论 CBFS算法 LeetCode2467. 树上最大得分和路径 一个 n 个节点的无向树&#xff0c;节点编号为 0 到 n - 1 &#xff0c;树的根结点是 0 号节点。给你一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] &#xff0c;表示节点 a…

Mysql | 尚硅谷 | 第02章_MySQL环境搭建

Mysql笔记&#xff1a;第02章_MySQL环境搭建 说明&#xff1a;本内容整理自尚硅谷B站MySQL视频>>尚硅谷B站MySQL视频 文章目录 Mysql笔记&#xff1a;第02章_MySQL环境搭建第02章_MySQL环境搭建 1. MySQL的卸载步骤1&#xff1a;停止MySQL服务步骤2&#xff1a;[软件](h…

【网络篇】TCP知识

TCP首部格式&#xff1f; 为什么需要 TCP 协议&#xff1f; TCP 工作在哪一层&#xff1f; IP 层是不可靠的&#xff0c;它不保证网络包的交付、不保证网络包的按序交付也不保证网络包中的数据的完整性。如果需要保障网络数据包的可靠性&#xff0c;那么就需要由上层&#xff0…

Spring Boot漫画之家:漫画爱好者的数字图书馆

2 系统开发环境 2.1 JAVA简介 JavaScript是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&#xff0c;便于结构的分离&…

一次“okhttp访问间隔60秒,提示unexpected end of stream“的问题排查过程

一、现象 okhttp调用某个服务&#xff0c;如果第二次访问间隔上一次访问时间超过60s&#xff0c;返回错误&#xff1a;"unexpected end of stream"。 二、最终定位原因&#xff1a; 空闲连接如果超过60秒&#xff0c;服务端会主动关闭连接。此时客户端恰巧访问了这…