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

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

商品详情功能说明

首页和商品列表,都是只展示商品的主要信息,如商品名称,商品价格,类型等内容,让人有一个先入为主的商品概念,当用户对商品有兴趣时,可以点击链接跳转商品详情页面,查看商品更全面的信息,如:颜色,尺寸等内容。

商品详情功能设计

根据商品详情页面功能说明,在此页面,用户可以查看商品的具体内容,如:图片,颜色,大小,类型,标签以及加入购物车,立即购买等功能,具体页面设计如下所示:

商品详情页面功能开发

商品详情主要展示商品信息和商品配置信息。

1. 数据表创建

关于商品表EB_Product和对应模型Product的创建,可参考第二篇文章。商品配置表EB_ProductConfig,主要配置商品的特殊属性,如:颜色,尺寸,缩略图等内容,如下所示:

创建表的语句,如下所示:

CREATE TABLE [dbo].[EB_ProductConfig](
	[Id] [bigint] IDENTITY(1,1) NOT NULL,
	[ProductId] [bigint] NULL,
	[ConfigType] [varchar](50) NULL,
	[ConfigName] [varchar](50) NULL,
	[ConfigValue] [varchar](150) NULL,
	[CreateTime] [datetime] NULL,
	[CreateUser] [varchar](50) NULL,
	[LastEditTime] [datetime] NULL,
	[LastEditUser] [varchar](50) NULL
) ON [PRIMARY]

 

2. 商品配置实体创建

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

namespace EasyBuyShop.Models
{
    /// <summary>
    /// 产品配置,主要配置颜色,大小,缩略图路径等
    /// </summary>
    [SqlSugar.SugarTable("EB_ProductConfig")]
    public class ProductConfig : EntityModel
    {
        public long ProductId { get; set; }
 
        public string ConfigType { get; set; }
 
        public string ConfigName { get; set; }
 
        public string ConfigValue { get; set; }
    }
}

 

3. 数据处理层DAL

商品详情页面主要根据商品ID获取商品的详细信息以及商品配置信息,如下所示:

商品详细信息在ProductDal中,如下所示:

public Product GetProduct(long Id)
{
    try
    {
        using (var db = this.GetDb(BaseDal.ConnStr))
        {
            return db.Queryable<Product>().First(r=>r.Id==Id);
        }
    }
    catch (Exception ex)
    {
        LogHelper.Fatal(ex.Message);
        return null;
    }
}

 

商品配置信息在ProductConfigDal中,获取配置信息如下所示:

using EasyBuyShop.Models;
using EasyBuyShop.Utils;
 
namespace EasyBuyShop.DAL
{
    public class ProductConfigDal : BaseDal
    {
        public ProductConfigDal()
        {
           
        }
 
        /// <summary>
        /// 获取产品配置
        /// </summary>
        /// <param name="productId"></param>
        /// <returns></returns>
        public List<ProductConfig> GetProductConfigListById(long productId)
        {
            try
            {
                using (var db = this.GetDb(BaseDal.ConnStr))
                {
                    return db.Queryable<ProductConfig>().Where(r => r.ProductId == productId).ToList();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Fatal(ex.Message);
                return new List<ProductConfig>();
            }
        }
    }
}

 

4. 控制器获取

商品详细信息在ProductController的Detail方法中,根据传入的ID进行读取,如下所示:

public IActionResult Detail(int Id)
{
    var username = HttpContext.Session.GetString("username");
    var realName = HttpContext.Session.GetString("realname");
    ViewData["Username"] = username;
    ViewData["RealName"] = realName;
    ProductDal productDal = new ProductDal();
    ProductConfigDal productConfigDal = new ProductConfigDal();
    var product = productDal.GetProduct(Id);
    var productConfigList = productConfigDal.GetProductConfigListById(Id);
    ViewData["ProductConfigList"]=productConfigList;
    ViewData["Product"] = product;
    return View();
}

 

将获取到的Product对象和ProductConfigList列表对象通过ViewData传递到View视图层中进行展示。

5. 视图层展示

在Views/Product/Detail.cshtml中,接收控制器方法传递的数据,并进行展示。如下所示:

@{
    ViewData["Title"] = "商品详情";
}
@{
    var product = ViewData["Product"] as Product;
    var productConfigList = ViewData["ProductConfigList"] as List<ProductConfig>;
}
<div class="">
    <form method="post" id="detailForm">
        <input type="hidden" name="productId" value="@(product.Id)" />
        <input type="hidden" name="color" id="color" value="" />
        <input type="hidden" name="size" id="size" value="" />
        <!-- quick view start -->
        <div class="container">
            <div class="row">
                <div id="view-gallery">
                    <div class="col-xs-12">
                        <div class="d-table" style="width:100%">
                            <div class="d-tablecell">
                                <div class="main-view modal-content">
                                    <div class="row">
                                        <div class="col-xs-12 col-sm-5">
                                            <div class="quick-image">
                                                <div class="single-quick-image tab-content text-center">
                                                    @{
                                                        var productConfigImages = productConfigList.Where(r => r.ConfigType == "Image").ToList();
                                                        for (int i = 0; i < productConfigImages.Count; i++)
                                                        {
                                                            var productConfigImage = productConfigImages[i];
                                                            <div class="tab-pane  fade in @(i==0?"active":"")" id="sin-pro-@(i)">
                                                                <img src="@(productConfigImage.ConfigValue)" alt="">
                                                            </div>
                                                        }
                                                    }
                                                </div>
                                                <div class="quick-thumb">
                                                    <div class="nav nav-tabs">
                                                        <ul style="padding-left:0px;">
                                                            @{
                                                                for (int i = 0; i < productConfigImages.Count; i++)
                                                                {
                                                                    var productConfigImage = productConfigImages[i];
                                                                    <li><a data-toggle="tab" href="##" onclick="javascript:tabProductImage('sin-pro-@(i)',this);"> <img src="@(productConfigImage.ConfigName)" alt="quick view" style="width:90px;height:90px;"> </a></li>
                                                                }
                                                            }
                                                        </ul>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="col-xs-12 col-sm-7">
                                            <div class="quick-right">
                                                <div class="quick-right-text">
                                                    <h3><strong>@product.Name</strong></h3>
                                                    <div class="rating">
                                                        <i class="fa fa-star"></i>
                                                        <i class="fa fa-star"></i>
                                                        <i class="fa fa-star"></i>
                                                        <i class="fa fa-star-half-o"></i>
                                                        <i class="fa fa-star-o"></i>
                                                    </div>
                                                    <div class="amount">
                                                        <h4>$@product.PreferentialPrice</h4>
                                                    </div>
                                                    <p>@product.Description</p>
                                                    <div class="row m-p-b">
                                                        <div class="col-sm-12">
                                                            <div class="por-dse responsive-strok clearfix">
                                                                <ul>
                                                                    <li><span>是否现货</span><strong>:</strong> 现货</li>
                                                                    <li><span>是否新品</span><strong>:</strong> 新品</li>
                                                                    <li>
                                                                        <span>商品类型</span><strong>:</strong>
                                                                        <a href="">@product.BasicStyle</a>
                                                                        <a href="">@product.ProductStyle</a>
                                                                    </li>
                                                                </ul>
                                                            </div>
                                                        </div>
                                                    </div>
                                                    <div class="row m-p-b">
                                                        <div class="col-sm-12">
                                                            <div class="por-dse color">
                                                                <ul>
                                                                    <li>
                                                                        <span>颜色分类</span><strong>:</strong>
                                                                        <div class="por-dsc-div">
                                                                            @{
                                                                                var productColors = productConfigList.Where(r => r.ConfigType == "Color").ToList();
                                                                                for (int i = 0; i < productColors.Count; i++)
                                                                                {
                                                                                    <span class="por-dsc-span" onclick="javascript:checkActive(this,'color');">@(productColors[i].ConfigValue)</span>
                                                                                }
                                                                            }
                                                                        </div>
                                                                    </li>
                                                                    <li>
                                                                        <span>大小</span><strong>:</strong>
                                                                        <div class="por-dsc-div">
                                                                            @{
                                                                                var productSizes = productConfigList.Where(r => r.ConfigType == "Size").ToList();
                                                                                for (int i = 0; i < productSizes.Count; i++)
                                                                                {
                                                                                    <span class="por-dsc-span" onclick="javascript:checkActive(this,'size');">@(productSizes[i].ConfigValue)</span>
                                                                                }
                                                                            }
                                                                        </div>
                                                                    </li>
                                                                    <li>
                                                                        <span>标签</span><strong>:</strong>
                                                                        <a href="">@product.BasicStyle</a>
                                                                        <a href="">@product.ProductStyle</a>
                                                                    </li>
                                                                </ul>
                                                            </div>
                                                        </div>
                                                    </div>
                                                    <div class="dse-btn">
                                                        <div class="row">
                                                            <div class="col-sm-12 col-md-12">
                                                                <div class="por-dse clearfix">
                                                                    <ul>
                                                                        <li class="share-btn clearfix">
                                                                            <span>数量</span>
                                                                            <input class="input-text qty" name="quantity" maxlength="12" value="1" title="数量" type="text">
                                                                        </li>
                                                                    </ul>
                                                                </div>
                                                            </div>
                                                            <div class="col-sm-12 col-md-12">
                                                                <div class="por-dse add-to" style="display:inline-block">
                                                                    <a href="##" onclick="javascript:addCartByForm();">加入购物车</a>
                                                                </div>
                                                                <div class="por-dse add-to" style="display:inline-block">
                                                                    <a href="##" onclick="javascript:addPurchaseByForm();">立即购买</a>
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <!-- quick view end -->
    </form>
</div>
<script src="~/js/shop.js"></script>

 

商品详情页面展示

运行程序,在首页或商品列表页面,点击商品链接,进入商品详情页面,如下所示:

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 能量回馈系统(Energy Feedback System)是一种能源节约技术,它可以将一些设备或系统中的能量回收利用,从而减少能源的浪费。然而,能量回馈系统控制也存在一些不足之处,包括: 1. 控制精度不高:能量回馈系统需要对能量进行精确的控制和管理,但是系统控制精度不高时,会导致能量回馈效果不佳,甚至会浪费更多的能源。 2. 设备兼容性问题:不同的设备和系统在能量回馈方面的特性和要求不同,因此,在控制能量回馈系统时,需要考虑设备的兼容性问题,否则可能会导致设备损坏或能量回馈效果不佳。 3. 系统稳定性差:能量回馈系统需要稳定运行才能达到最佳效果,但是,系统稳定性差时,容易出现故障,导致能量回馈效果不佳或者系统无法正常工作。 4. 维护成本高:能量回馈系统需要定期进行维护和保养,否则可能会导致系统故障或能量回馈效果不佳。而且,维护成本较高,需要投入大量的人力和物力。 因此,在实际应用中,需要对能量回馈系统进行科学合理的控制和管理,以达到最佳的能源节约效果。 ### 回答2: 能量回馈系统是一种常见的控制技术,广泛应用于多个领域。然而,它也存在一些不足之处。 首先,能量回馈系统在实际应用中需要较高的成本。该系统需要使用能量传感器和控制器来监测和调节系统的能量输出,这增加了系统的成本和复杂性。此外,系统的安装和维护也需要一定的费用。 其次,能量回馈系统的精度受到一些因素的影响。系统的精确性依赖于传感器的测量和控制器的准确性。如果这些组件存在误差或故障,系统的性能将受到影响。此外,能量回馈系统也受到外部环境条件的影响,如温度、湿度等,这可能导致系统运行不稳定或失灵。 另外,能量回馈系统的响应速度有限。由于能量的产生、传输和控制存在一定的延迟,系统在对不同输入信号的快速响应上存在局限性。这对于某些要求快速响应的应用场景可能不够理想。 此外,能量回馈系统还受到能量储存和传输能力的限制。如果能量的储存和传输能力不足,系统将无法满足某些高功率需求或远距离传输能量的应用。 最后,能量回馈系统对环境的严厉要求也是其不足之处之一。由于系统中涉及到能量的传输和转换过程,对于一些特殊环境条件,如高温、高压、腐蚀性环境等,系统可能无法正常运行。 综上所述,能量回馈系统的成本、精度、响应速度、能量传输能力以及对环境的要求是其存在的不足之处。随着技术的发展和进步,这些不足之处可能会逐步得到解决和改进。 ### 回答3: 能量回馈系统是一种利用能量回收的技术,用于控制电力设备的能量消耗。然而,能量回馈系统也存在一些不足之处: 首先,能量回馈系统在工作效率上存在问题。回馈系统需要将设备产生的能量回收并再利用,但这个过程并非完全高效。在能量回收和再利用的过程中,会有能量损失,这导致了系统整体的能量效率较低。 其次,能量回馈系统的成本较高。为了实现能量回收和再利用,需要引入额外的设备和技术,这增加了系统的设计和建设成本。对于一些规模较小或经济条件较差的企业或个人来说,能量回馈系统的投资可能不划算。 此外,能量回馈系统的可靠性也是一个问题。回馈系统的稳定性和可靠性对于设备的正常运行非常重要。如果回馈系统出现故障或运行不稳定,可能导致电力设备的损坏或无法正常工作,增加了维修和替换成本。 最后,能量回馈系统的适用范围有限。这种系统适用于某些需要频繁启动和停止的设备,如电梯或地铁。然而,对于稳定运行的设备,如发电机或供暖系统,能量回馈系统的功效相对有限。因此,在选择是否采用能量回馈系统时,需要综合考虑设备的特点和实际需求。 综上所述,虽然能量回馈系统能够实现能量的回收和再利用,但其效率、成本、可靠性和适用范围等方面还存在不足之处。随着技术的不断推进,相信这些问题将得到进一步改善和解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老码识途呀

写作不易,多谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值