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

这篇具有很好参考价值的文章主要介绍了[回馈]ASP.NET Core MVC开发实战之商城系统(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

 

开发工具及技术

 

在本商城系统实例中,主要用到的开发工具和技术,如下所示:

  • 开发工具,Visual Studio 2022 
  • 数据库,SQL Server Management Studio 2012
  • 开发框架,基于.Net 6.0的ASP.NET Core MVC
  • 前端框架,基于项目自带的bootstrap,jQuery等前端库。

 

页面布局

 

根据前一篇文章的讲解,在首页除了商品类型,banner条,友情链接外,还有降价促销,新品爆款两个部分,为首页产品展示的核心,具体布局如下所示:

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

 

数据表设计

 

首先设计产品表Product,主要用于存储产品的详细信息,包括产品名称,价格,店铺ID等内容,具体如下所示:

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

建表语句,如下所示:

CREATE TABLE [dbo].[EB_Product](
	[Id] [bigint] IDENTITY(1,1) NOT NULL,
	[ShopId] [bigint] NULL,
	[Name] [varchar](100) NULL,
	[CategoryId] [bigint] NULL,
	[SubCategoryId] [bigint] NULL,
	[Price] [money] NULL,
	[Preferential] [numeric](18, 4) NULL,
	[PreferentialPrice] [money] NULL,
	[Description] [text] NULL,
	[Brand] [varchar](50) NULL,
	[BasicStyle] [varchar](50) NULL,
	[ProductStyle] [varchar](50) NULL,
	[Year] [varchar](50) NULL,
	[Season] [varchar](50) NULL,
	[Scenario] [varchar](50) NULL,
	[ImageUrl] [varchar](500) NULL,
	[CreateTime] [datetime] NULL,
	[CreateUser] [varchar](50) NULL,
	[LastEditTime] [datetime] NULL,
	[LastEditUser] [varchar](50) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

 

商品实体创建

 

产品表对应的项目模型实体,和数据表一一对应,如下所示:

using SqlSugar;

namespace EasyBuyShop.Models
{
    [SugarTable("EB_Product")]
    public class Product : EntityModel
    {
        /// <summary>
        /// 店铺ID
        /// </summary>
        public long ShopId { get; set; }

        /// <summary>
        /// 产品名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 大类ID
        /// </summary>
        public long CategoryId { get; set; }

        /// <summary>
        /// 小类ID
        /// </summary>
        public long SubCategoryId { get; set; }

        /// <summary>
        /// 价格
        /// </summary>
        public decimal Price { get; set; }

        /// <summary>
        /// 打折后价格
        /// </summary>
        public decimal PreferentialPrice { get; set; }

        /// <summary>
        /// 品牌
        /// </summary>
        public string Brand { get; set; }

        /// <summary>
        /// 折扣
        /// </summary>
        public decimal Preferential { get; set; }
        public string Description { get; set; }

        /// <summary>
        /// 基础风格
        /// </summary>
        public string BasicStyle { get; set; }

        /// <summary>
        /// 产品风格
        /// </summary>
        public string ProductStyle { get; set; }

        /// <summary>
        /// 年份
        /// </summary>
        public string Year { get; set; }

        /// <summary>
        /// 季节
        /// </summary>
        public string Season { get; set; }

        /// <summary>
        /// 主要场景
        /// </summary>
        public string Scenario { get; set; }

        /// <summary>
        /// 主图片Url
        /// </summary>
        public string ImageUrl { get; set; }
    }
}

 

数据处理层DAL

 

数据处理层用于和数据库进行交互,本次主要用于获取折扣Top3,和新品Top100这两种条件的的商品列表,如下所示:

using EasyBuyShop.Models;
using EasyBuyShop.Utils;

namespace EasyBuyShop.DAL
{
    public class ProductDal:BaseDal
    {
        /// <summary>
        /// 新品前100
        /// </summary>
        /// <returns></returns>
        public List<Product> GetTopNew100()
        {
            try
            {
                using (var db = this.GetDb(BaseDal.ConnStr))
                {
                    return db.Queryable<Product>().OrderByDescending(r => r.Id).Take(100).ToList();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Fatal(ex.Message);
                return new List<Product>();
            }
        }

        /// <summary>
        /// 折扣Top3
        /// </summary>
        /// <returns></returns>
        public List<Product> GetTopDisCount3()
        {
            try
            {
                using (var db = this.GetDb(BaseDal.ConnStr))
                {
                    return db.Queryable<Product>().OrderByDescending(r => r.Preferential).Take(3).ToList();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Fatal(ex.Message);
                return new List<Product>();
            }
        }
    }
}

注意:上述功能采用SqlSugar自带的方法实现,会根据Lamada表达式生成对应的SQL语句,可减少手写SQL的繁琐。

 

控制器获取

 

因为降价促销和新品爆款,也是首页的一部分,所以需要在首页控制器HomeController中,获取对应商品,传递到视图层,如下所示:

using EasyBuyShop.DAL;
using EasyBuyShop.Models;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;

namespace EasyBuyShop.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> logger;

        public HomeController(ILogger<HomeController> logger)
        {
            this.logger = logger;
        }

        public IActionResult Index()
        {
            CategoryDal categoryDal = new CategoryDal();
            SubCategoryDal subCategoryDal = new SubCategoryDal();
            ProductDal productDal = new ProductDal();
            var categories = categoryDal.GetCategories();
            var subCategories = subCategoryDal.GetSubCategories();
            var topNew100Product = productDal.GetTopNew100();
            var topDiscount3Product = productDal.GetTopDisCount3();
            ViewData["Categories"] = categories;
            ViewData["SubCategories"] = subCategories;
            ViewData["TopNew100"] = topNew100Product;
            ViewData["TopDiscount3"] = topDiscount3Product;
            var username = HttpContext.Session.GetString("username");
            var realName = HttpContext.Session.GetString("realname");
            ViewBag.Username = username;
            ViewBag.RealName = realName;
            return View();
        }
    }
}

注意:控制器方法中,往视图层传递数据采用ViewData和ViewBag实现,也可采用其他方式实现。具体ViewData和ViewBag传递数据之间的差异,可参考之前写的相关文章。

 

视图层展示

 

在Views/Home/Index.cshtml视图页面中,降价促销为一行三列,展示降价Top3的商品,具体如下所示:

<!-- banner style 2 start -->
<div class="banner-style-2 pt-100">
	<div class="container" style="margin-left:0px;margin-right:0px;padding-right:0px;padding-left:0px;">
		<div class="row">
			@foreach (var topDiscount in ViewData["TopDiscount3"] as List<Product>)
			{
				<div class="col-md-4">
					<div class="banner-style-2-img mb-res">
						<img src="@topDiscount.ImageUrl" alt="">
						<div class="banner-style-2-dec">
							<h4>@topDiscount.Brand</h4>
							<h3>降价 @(Math.Round( topDiscount.Preferential*100,0))% 销售</h3>
							<a href="" onclick="javascript:buy(@(topDiscount.Id));return false;">购买</a><br>
						</div>
					</div>
					<div class="shop-title f-left">
						<h3><a href="/Product/Detail/@(topDiscount.Id)">@topDiscount.Name</a></h3>
					</div>
				</div>
			}
		</div>
	</div>
</div>
<!-- banner style 2 end -->

新品爆款为一行四列,展示新品信息,源码如下所示:

<!-- shop area start -->
<div class="portfolio-area pt-100 pb-70" style="padding-top:100px;padding-bottom:70px;">
	<div class="container">
		<div class="section-title text-center mb-50">
			<h2>新品爆款 <i class="fa fa-shopping-cart"></i></h2>
		</div>
		<div class="row portfolio-style-2">
			<div class="grid" style="position: relative; height: 100%;">
				@foreach (var topNewProduct in ViewData["TopNew100"] as List<Product>)
				{
					<div class="col-md-3 col-sm-6 col-xs-12 mb-30">
						<div class="single-shop">
							<div class="shop-img">
								<a href="/Product/Detail/@(topNewProduct.Id)"><img src="@topNewProduct.ImageUrl" alt=""></a>
								<div class="shop-quick-view">
									<a href="/Product/Detail/@(topNewProduct.Id)" 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">新品</span>
								</div>
								<div class="button-group">
									<a href="#" title="添加购物车" onclick="javascript:addCart(@(topNewProduct.Id));return false;">
										<i class="pe-7s-cart"></i>
										添加购物车
									</a>
									<a class="wishlist" href="#" onclick="javascript:buy(@(topNewProduct.Id));return false;" title="立即购买">
										<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/@(topNewProduct.Id)">@topNewProduct.Name</a></h3>
									</div>
									<span class="price f-right">
										<span class="new">$@topNewProduct.PreferentialPrice</span>
									</span>
								</div>
								<div class="fix">
									<span class="f-left">@(topNewProduct.BasicStyle) | @(topNewProduct.ProductStyle)</span>
								</div>
							</div>
						</div>
					</div>
				}
			</div>
		</div>
	</div>
</div>
<!-- shop area end -->

注意:其中视图层代码,采用Razor表达式for循环,展示列表中的内容。关于Razor表达式的使用可参考其他文章。

 

页面展示

 

降价促销功能,运行如下所示:

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

新品爆款功能,运行如下所示:

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

以上就是ASP.NET Core MVC开发实战之商城系统第二部分内容,后续将继续介绍其他模块,敬请期待。文章来源地址https://www.toymoban.com/news/detail-600429.html

到了这里,关于[回馈]ASP.NET Core MVC开发实战之商城系统(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    在编程方面,从来都是实践出真知,书读百遍其义自见,所以实战是最好的提升自己编程能力的方式。 前一段时间,写了一些实战系列文章,如: ASP.NET MVC开发学生信息管理系统 Vue+Antdv+Asp.net WebApi开发学生信息管理系统 WPF+Prism+MAH+Asp.net Web Api开发学生信息管理系统 ASP.NET C

    2024年02月16日
    浏览(41)
  • [回馈]ASP.NET Core MVC开发实战之商城系统(六)

    经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情,购物车等功

    2024年02月11日
    浏览(35)
  • [回馈]ASP.NET Core MVC开发实战之商城系统(完:内附源码)

    经过一段时间的准备,【ASP.NET Core MVC开发实战之商城系统】已经完成,目前代码已开发完成,先将全部内容整理分享,如有不足之处,还请指正。     本系列文章主要讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情

    2024年02月11日
    浏览(34)
  • asp.net core 框架搭建2-搭建MVC后台管理系统

    作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/131458964 asp.net core 框架搭建2-搭建MVC后台管理系统 ,本文章介绍asp.net core框架搭建,然后开发一个后台管理系统,将一步步带着大家,实现目标。所有操作过程将展现在本篇文章,下面咋们一起来实现它吧。 使

    2024年02月12日
    浏览(33)
  • ASP.NET Core MVC -- 将视图添加到 ASP.NET Core MVC 应用

    右键单击“视图”文件夹,然后单击“添加”“新文件夹”,并将文件夹命名为“HelloWorld”。 右键单击“Views/HelloWorld”文件夹,然后单击“添加”“新项”。 在“添加新项 - MvcMovie”对话框中: 在右上角的搜索框中,输入“视图” 选择“Razor 视图 - 空” 保持“名称”框的

    2024年02月13日
    浏览(63)
  • ASP.NET Core MVC -- 入门

     带有 ASP.NET 和 Web 开发工作负载的Visual Studio Visual Studio Code Visual Studio Code 用于 Visual Studio Code 的 C#(最新版本) .NET 7.0 SDK  ctrl + F5 (开始执行,不调试) 在代码工作区间文件夹路径下打开终端运行下面的命令  通过运行以下命令来信任 HTTPS 开发证书: 编译运行

    2024年02月11日
    浏览(32)
  • ASP.NET Core 中的 MVC架构

    MVC架构把 App 按照逻辑分成三层: Controllers,接收 http request,配合 model,通过http response 返回 view,尽量不做别的事 Models, 负责业务逻辑,App 的状态,以及数据处理 Views,呈现 UI,如果UI 较复杂,应该使用View 组件, ViewModel, 或者 view 模板 Controller ASP.NET Core MVC 中的所有 Control

    2024年02月09日
    浏览(30)
  • ASP.NET Core MVC -- 控制器

    默认控制器访问index 特定访问路径   特定路径访问,带参数

    2024年02月12日
    浏览(37)
  • 基于ASP.NET MVC开发的、开源的个人博客系统

    推荐一个功能丰富、易于使用和扩展的开源博客,可以轻松地创建和管理自己的博客。 基于.Net Framework 4.5开发的、开源博客系统,具有丰富的功能,包括文章发布、分类、标签、评论、订阅、统计等功能,同时也可以根据需要进行自定义扩展。 提供了丰富的配置选项和API,

    2024年02月14日
    浏览(40)
  • 【ASP.NET Core】MVC过滤器:运行流程

    MVC 的过滤器(Filters)也翻译为“筛选器”。但是老周更喜欢翻译为“过滤器”,意思上更好理解。 既然都叫过滤器了,就是在MVC的操作方法调用前后进行特殊处理的类型。比如: a、此调用是否已授权? b、在模型绑定之前要不要修改数据源?(可能含有儿童不宜的数据)

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包