[回馈]ASP.NET Core MVC开发实战之商城系统(三)

news2024/9/23 14:31:20

经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】等功能的开发,今天继续讲解商品列表页面功能开发,仅供学习分享使用,如有不足之处,还请指正。

商品列表功能说明

一般首页主要用于呈现给客户最想看到的商品,如:销量最高,降价促销,季度新品等,如果客户想要的商品在首页并没有展示,就需要用户搜索商品的关键词来查找,或者通过商品类型来缩小范围,这时候就会需要用到商品列表功能。

商品列表主要用于搜索商品结果的展示,或者某一种商品类型商品的展示,呈现方式有两种:网格形式或者列表形式,用户可以在两种形式之间自由切换。

商品列表设计

根据功能分析,商品列表主要展示商品信息,有网格形式和列表形式两种。整体页面如下所示:

商品列表功能开发

商品列表主要展示商品信息,关于商品表EB_Product和对应模型Product的创建,可参考前一篇文章。

1. 数据处理层DAL

首先商品列表主要有两个来源,1.点击商品类型跳转商品列表 2. 关键字搜索进入商品列表。所以在检索时需要满足两个条件。DAL【Data Access Layer】层处理如下所示:

using EasyBuyShop.Models;
using EasyBuyShop.Utils;
 
namespace EasyBuyShop.DAL
{
    public class ProductDal:BaseDal
    {
        public List<Product> GetProductList(int categoryId,int subCategoryId,string productName)
        {
            try
            {
                using (var db = this.GetDb(BaseDal.ConnStr))
                {
                    if(categoryId>0 && subCategoryId > 0)
                    {
                        return db.Queryable<Product>().Where(r=>r.CategoryId==categoryId && r.SubCategoryId==subCategoryId).ToList();
                    }
                    else
                    {
                        return db.Queryable<Product>().Where(r => r.Name.Contains(productName)).ToList();
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Fatal(ex.Message);
                return new List<Product>();
            }
        }
    }
}

 

2. 控制器获取

在控制器ProductController的Index方法中,以接收到的参数为条件,获取符合条件的商品列表,传递到视图层,如下所示:

public IActionResult Index(int categoryId,int subCategoryId,string productName)
{
    var username = HttpContext.Session.GetString("username");
    var realName = HttpContext.Session.GetString("realname");
    ViewBag.Username = username;
    ViewBag.RealName = realName;
    ProductDal productDal = new ProductDal();
    var productList= productDal.GetProductList(categoryId, subCategoryId, productName);
    ViewData["ProductList"]= productList;
    return View();
}

 

同样在本示例中,以ViewData来传递数据。个人建议:对于简单类型,可采用ViewBag进行传递;对于复杂类型,或视图中需要明确类型的,可采用ViewData进行传递。

3. 视图层展示

在视图Views\Product\Index.cshtml页面中,对控制器方法传递的数据进行解析组合展示。如下所示:

@{
    ViewData["Title"] = "商品列表";
}
<div class="shop-page-area ptb-100">
    <div class="container" style="width:100%;padding-left:0px;padding-right:0px;">
        <div class="row">
            <div class="col-md-9">
                <div class="blog-wrapper shop-page-mrg">
                    <div class="tab-menu-product">
                        <div class="tab-menu-sort">
                            <div class="tab-menu">
                                <ul role="tablist">
                                    <li class="active" id="gridTab">
                                        <a href="#grid" data-toggle="tab" onclick="javascript:showGrid();return false;">
                                            <i class="fa fa-th-large"></i>
                                            网格
                                        </a>
                                    </li>
                                    <li id="listTab">
                                        <a href="#list" data-toggle="tab" onclick="javascript:showList();return false;">
                                            <i class="fa fa-align-justify"></i>
                                            列表
                                        </a>
                                    </li>
                                </ul>
                            </div>
                            <div class="tab-sort">
                                <label>排序 : </label>
                                <select>
                                    <option value="">位置</option>
                                    <option value="">流行度</option>
                                    <option value="">价格</option>
                                    <option value="">评分</option>
                                </select>
                            </div>
                        </div>
                        <div class="tab-product">
                            <div class="tab-content">
                                <div class="tab-pane active" id="grid">
                                    <div class="row">
                                        @{
                                            var products = ViewData["ProductList"] as List<Product>;
                                            if(products!=null && products.Count > 0)
                                            {
                                                foreach (var product in products)
                                                {
                                                    <div class="col-md-6 col-lg-4 col-sm-6">
                                                        <div class="single-shop mb-40">
                                                            <div class="shop-img">
                                                                <a href="#"><img src="@product.ImageUrl" alt=""></a>
                                                                <div class="shop-quick-view">
                                                                    <a href="/Product/Detail/@product.Id" data-toggle="modal" data-target="#quick-view" title="预览">
                                                                        <i class="pe-7s-look"></i>
                                                                    </a>
                                                                </div>
                                                                <div class="button-group">
                                                                    <a href="#" title="添加购物车" onclick="javascript:addCart(@(product.Id));return false;">
                                                                        <i class="pe-7s-cart"></i>
                                                                        添加购物车
                                                                    </a>
                                                                    <a class="wishlist" href="#" title="立即购买" onclick="javascript:buy(@(product.Id));return false;">
                                                                        <i class="pe-7s-like"></i>
                                                                        立即购买
                                                                    </a>
                                                                </div>
                                                            </div>
                                                            <div class="shop-text-all">
                                                                <div class="title-color fix">
                                                                    <div class="shop-title f-left">
                                                                        <h3><a href="/Product/Detail/@product.Id">@product.Name</a></h3>
                                                                    </div>
                                                                    <span class="price f-right">
                                                                        <span class="new">$@product.PreferentialPrice</span>
                                                                    </span>
                                                                </div>
                                                                <div class="fix">
                                                                    <span class="f-left">@(product.BasicStyle) | @(product.ProductStyle)</span>
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                }
                                            }
                                            else
                                            {
                                                <div>没有符合条件的商品</div>
                                            }
                                        }
                                    </div>
                                </div>
                                <div class="tab-pane mb-10" id="list">
                                    <div class="row">
                                        <div class="col-md-12">
                                            <div class="row">
                                                @{
                                                    if (products != null && products.Count > 0)
                                                    {
                                                        foreach (var product in products)
                                                        {
                                                            <div class="single-shop mb-40">
                                                                <div class="col-md-4 col-sm-4 col-xs-12">
                                                                    <div class="shop-list-left">
                                                                        <div class="shop-img">
                                                                            <a href="#"><img src="@product.ImageUrl" alt=""></a>
                                                                            <div class="shop-quick-view">
                                                                                <a href="#" data-toggle="modal" data-target="#quick-view" title="预览">
                                                                                    <i class="pe-7s-look"></i>
                                                                                </a>
                                                                            </div>
                                                                            <div class="price-up-down">
                                                                                <span class="sale-new"> @(Math.Round(product.Preferential * 100, 0))% </span>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                </div>
                                                                <div class="col-md-8 col-sm-8 col-xs-12">
                                                                    <div class="shop-list-right">
                                                                        <div class="shop-list-all">
                                                                            <div class="shop-list-name">
                                                                                <h3><a href="/Product/Detail/@product.Id">@product.Name</a></h3>
                                                                            </div>
                                                                            <div class="shop-list-rating">
                                                                                <span class="ratting">
                                                                                    <i class="fa fa-star active"></i>
                                                                                    <i class="fa fa-star active"></i>
                                                                                    <i class="fa fa-star active"></i>
                                                                                    <i class="fa fa-star active"></i>
                                                                                    <i class="fa fa-star active"></i>
                                                                                </span>
                                                                            </div>
                                                                            <div class="shop-list-price">
                                                                                <span class="list-price">
                                                                                    <span class="new">$@product.PreferentialPrice</span>
                                                                                    <span class="old">$@product.Price</span>
                                                                                </span>
                                                                            </div>
                                                                            <div class="shop-list-cart">
                                                                                <div class="shop-group">
                                                                                    <a href="#" title="加入购物车" onclick="javascript:addCart(@(product.Id));return false;">
                                                                                        <i class="pe-7s-cart"></i>
                                                                                        加入购物车
                                                                                    </a>
                                                                                    <a class="wishlist" href="#" title="立即购买" onclick="javascript:buy(@(product.Id));return false;">
                                                                                        <i class="pe-7s-like"></i>
                                                                                        立即购买
                                                                                    </a>
                                                                                </div>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                </div>
                                                            </div>
                                                        }
                                                    }
                                                    else
                                                    {
                                                        <div>没有符合条件的商品</div>
                                                    }
                                                }
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <div class="page-pagination text-center" style="margin-top:10px;">
                                    <ul>
                                        @{
                                            var totalNum =Math.Ceiling(products.Count / 40.0f);
                                            var currentNum = 1;
                                            for(int i = 1; i <= totalNum; i++)
                                            {
                                                <li><a class="@(i == currentNum?"active":string.Empty)" href="#">@i</a></li>
                                            }
                                        }
                                        <li><a href="#"><i class="fa fa-angle-double-right">»</i></a></li>
                                    </ul>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="~/js/plugins.js"></script>
<script src="~/js/shop.js"></script>

 

运行测试

运行页面,点击商品类型,跳转到商品列表,效果如下所示:

UI设计说明

在本示例中,其实后端业务逻辑并不是很复杂,主要是前端UI相对比较麻烦,如布局,展示,定位等相关内容。如果没有对应方面的知识储备,建议先找相资料进行学习。

关于CSS中display属性以及说明如下所示:

关于CSS中的Position属性说明如下所示:

以上就是ASP.NET Core MVC开发实战之商城系统第三部分内容。后续将继续介绍其他模块。

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

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

相关文章

如何使用ArcGIS Pro制作越来越真实的水域效果

制图的目的就是为了让图更加的美观&#xff0c;这里我们以水域效果为例&#xff0c;为大家讲解一下如何一步步制作越来越真实的水域效果&#xff0c;希望能对你有所帮助。 常规效果 使用过ArcMap制图的朋友应该比较熟悉&#xff0c;可以在符号系统内修改一下填充颜色&#xff…

启用、禁用员工账号

接口相关信息 controller层 /** 启用禁用员工账号* */PostMapping("/status/{status}")ApiOperation("启用禁用员工账号")public Result startOrStop(PathVariable Integer status, Long id) {log.info("启用禁用员工{}&#xff0c;{}",status,i…

Bert模型及变体

ALBert ALBERT就是为了解决模型参数量大以及训练时间过长的问题。ALBERT最小的参数只有十几M, 效果要比BERT低1-2个点&#xff0c;最大的xxlarge也就200多M。可以看到在模型参数量上减少的还是非常明显的&#xff0c;但是在速度上似乎没有那么明显。最大的问题就是这种方式其实…

Kubernetes 之CNI 网络插件对比

介绍 网络架构是Kubernetes中较为复杂、让很多用户头疼的方面之一。Kubernetes网络模型本身对某些特定的网络功能有一定要求&#xff0c;但在实现方面也具有一定的灵活性。因此&#xff0c;业界已有不少不同的网络方案&#xff0c;来满足特定的环境和要求。 CNI意为容器网络接…

Java是什么?为什么众多编程语言要学习Java?Java有哪些特点?

Java 是近 十几 年来计算机软件发展过程中的传奇&#xff0c;其在众多开发者心中的地位可谓“爱不释手”&#xff0c;与其他一些计算机语言随着时间的流逝影响也逐渐减弱不同&#xff0c;Java 随着时间的推移却依然坚挺。 从首次发布开始&#xff0c;Java 就跃到了 Internet 编…

「开源项目」强大易用的开源建站工具-halo

建站工具halo 基本介绍 Halo 作为一款好用又强大的开源建站工具&#xff0c;配合上不同的模板与插件&#xff0c;可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站&#xff0c;可以是你的个人博客&#xff0c;也可以是团队共享的知识库&#xff0c;甚至可以是一…

通过Filebeat进行日志监控

对系统的日志监控&#xff0c;通用做法是使用ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;进行监控和搜索日志&#xff0c;这里给出另一种方案&#xff1a;通过Filebeat接收日志到Kafka&#xff0c;监控平台接收Kafka&#xff0c;并通过WebSocket实时展示。 这…

Java枚举类的构造函数

Java枚举类可以定义构造函数 Java枚举类可以定义构造函数&#xff0c;枚举常量后面括号中的参数值就是传递给构造函数的参数。 代码示例&#xff1a; package com.thb;public enum Constant {// 枚举常量后面括号中的参数值就是传递给构造函数的参数值REGISTER((byte)0x01),…

windows版docker部署springcloud项目

材料&#xff1a; 1.windows版docker环境&#xff08;其他版教程可能道理一样但是比如文件后坠名上可能有差异&#xff09; 2.运行好的数据库容器&#xff08;实现教程&#xff09; 3.所有jar包 实现&#xff1a; 最后整好的文件夹结构图&#xff08;原工程文件机密&#xf…

教你一文教你使用自己的域名远程访问内网群晖NAS+6.X【内网穿透】

文章目录 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 在之前的文章中&#xff0c;我们向大家演示了如何使用cpolar&#xff0c;创建一条固定的、能够在公共互联网登录内网群晖NAS的数据隧道。这条隧道已经能够应对…

医学案例|ROC曲线之面积对比

一、案例介绍 为评价CT和CT增强对肝癌的诊断效果&#xff0c;共检查了32例患者&#xff0c;每例患者分别用两种方法检查&#xff0c;由医生盲态按4个等级诊断&#xff0c;最后经手术病理检查确诊其中有16例患有肝癌&#xff0c;评价CT个CT增强对肝癌是有有诊断效果并且试着比较…

cpolar内网穿透工具

文章目录 cpolar内网穿透工具 cpolar内网穿透工具 科学技术的发展日新月异&#xff0c;电子设备在人们的生活中已成为不可或缺的工具&#xff0c;甚至在很多情况下&#xff0c;各类型的电子设备已经成为工作的核心&#xff0c;虽然移动设备越来越小巧&#xff0c;功能也越来越…

Lab1 datalab

修改bits.c&#xff0c;使其满足btest的测试&#xff0c;代码规范./dlc bits.c 测试 make cleanmake btest./btest bitXor 思路 题目的意思是用按位&和取反~实现异或^操作。即x和y的同一位置如果都是1或者都是0&#xff0c;那么异或之后是0&#xff0c;否则是1 x & …

C#学习系列之System.Windows.Data Error: 40报错

C#学习系列之System.Windows.Data Error: 40报错 前言报错内容解决总结 前言 在用户界面使用上&#xff0c;代码运行没有问题&#xff0c;但是后台报错&#xff0c;仔细研究了报错内容&#xff0c;解决问题&#xff0c;所以记录一下。 报错内容 System.Windows.Data Error: 4…

【小波尺度谱】从分段离散小波变换计算小波尺度谱研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Python 进阶(二):操作字符串的常用方法

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、索引和切片二、字符串长度三、查找和替换四、大小写转换五、分割和连接六、去除空…

【深度解析】蓝牙室内定位方案优势介绍

万物互联时代&#xff0c;数据的价值进一步凸显&#xff0c;在海量数据中&#xff0c;位置数据成为万物互联产业中的基础坐标。室内空间结构越来越复杂&#xff0c;人们对位置的实时性和精确度要求不断提高&#xff0c;室内定位的需求也空前高涨。卫星信号对障碍物的穿透性较弱…

国内好用的企业级在线文档有哪些?

在当今数字化时代&#xff0c;企业级在线文档已经成为了现代办公环境中不可或缺的一部分。它不仅能够提高工作效率&#xff0c;还能够实现多人协同编辑&#xff0c;满足团队协作的需求。那么&#xff0c;在国内市场上&#xff0c;哪些企业级在线文档产品备受企业青睐呢&#xf…

【深度学习】WaveMix: A Resource-efficient Neural Network for Image Analysis 论文

论文&#xff1a;https://arxiv.org/abs/2205.14375 代码&#xff1a;https://github.com/pranavphoenix/WaveMix 文章目录 ABSTRACTIntroductionBackground and Related WorksWaveMix Architectural FrameworkOverall architectureWaveMix block Experiments and ResultsTasks…

计算机图形学十五菲涅尔方程

菲涅尔效应 菲涅尔效应在我们的日常生活中无处不在&#xff0c;下面来个例子三连&#xff1a; 我们去公园的池塘喂鲤鱼&#xff0c;当爆米花丢的比较近的时候&#xff0c;我们可以看见水底下成群的鲤鱼在抢吃的。但是当我们把爆米花丢的很远时&#xff0c;却看不见水底下那些如…