abp(net core)+easyui+efcore实现仓储管理系统——供应商管理升级之上(六十三)

abp(net core)+easyui+efcore实现仓储管理系统目录

 
 
    有了前面两篇关于升级的文章,组织管理和模块管理,并在升级过程中解决了一些升级中出现的问题。我们对供应商管理这个模块进行升级,这次的升级涉及到前端页面的一些问题。
 

1.在Visual Studio 2022的解决方案资源管理器中,选中“ABP.TPLMS.Web.Mvc”项目,然后单击鼠标右键,在弹出菜单中选中“设为启动项目”。按F5运行应用程序。

2.在浏览器将呈现登录页面,然后输入管理员用户名进行登录。浏览器跳转到首页面。如下图。

 abp(net core)+easyui+efcore实现仓储管理系统——供应商管理升级之上(六十三)

 

3.在主界面的菜单中,选择“Business->供应商管理”菜单项,浏览器立即报了一个错误。如下图。

abp(net core)+easyui+efcore实现仓储管理系统——供应商管理升级之上(六十三)

 

4.这是AutoMapper.Mapper方法造成的。这是由于在升级的时候,AutoMapper也升级了。由于NET模型映射器AutoMapper 9.0之后,官方宣称不再支持静态方法调用,之前直接升级编译报错无法使用。我简单的在代码的构造函数中使用注入方式,注入Mapper。现在实际运行时,发现这种方式,如果没有在startup.cs代码中预先注册,是无法使用的。原先的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using Abp.Application.Services.Dto;
using Abp.AspNetCore.Mvc.Authorization;
using Abp.Auditing;
using Abp.Runtime.Validation;
using ABP.TPLMS.Controllers;
using ABP.TPLMS.Suppliers;
using ABP.TPLMS.Suppliers.Dto;
using ABP.TPLMS.Web.Models.Supplier;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
 
// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
 
namespace ABP.TPLMS.Web.Controllers
{
    [AbpMvcAuthorize]
    [Audited]
    public class SupplierController : TPLMSControllerBase
    {
        const int MaxNum= 10;
        // GET: /<controller>/
        [DisableAuditing]
        public async Task<IActionResult> Index()
        {
 
            SupplierDto cuModule=null;

            var module = (await _supplierAppService.GetAllAsync(new PagedSupplierResultRequestDto { MaxResultCount = MaxNum })).Items; // Paging not implemented yet
            if (module.Count>0)
            {
                cuModule = module.First();
            }
           
            var model = new SupplierListViewModel
            {
                Supplier = cuModule,
                Suppliers=module
            };
          
            return View(model);
        }
 
        private readonly ISupplierAppService _supplierAppService;
        AutoMapper.Mapper m_map;

        public SupplierController(ISupplierAppService supplierAppService,AutoMapper.Mapper map)
        {
            _supplierAppService = supplierAppService;

            m_map = map;
        }

        public async Task<ActionResult> EditSupplierModal(int supplierId)
        {
           
            var module = await _supplierAppService.GetAsync(new EntityDto<int>(supplierId));
            CreateUpdateSupplierDto cuSupplier = m_map.Map<CreateUpdateSupplierDto>(module);

            var model = new EditSupplierModalViewModel
            {
                Supplier = cuSupplier
            };
            return View("_EditSupplierModal", model);
        }
    }
}

 

 5.幸好发现有一个ABP.ObjectMapper.Map方法可以使用,我们将代码修改为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Abp.Application.Services.Dto;
using Abp.AspNetCore.Mvc.Authorization;
using Abp.Auditing;
using Abp.Runtime.Validation;
using ABP.TPLMS.Controllers;
using ABP.TPLMS.Suppliers;
using ABP.TPLMS.Suppliers.Dto;
using ABP.TPLMS.Web.Models.Supplier;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
 
// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
 
namespace ABP.TPLMS.Web.Controllers
{
    [AbpMvcAuthorize]
    [Audited]
    public class SupplierController : TPLMSControllerBase
    {
        const int MaxNum= 10;
        // GET: /<controller>/
        [DisableAuditing]
        public async Task<IActionResult> Index()
        {
 
            SupplierDto cuModule=null;

            var module = (await _supplierAppService.GetAllAsync(new PagedSupplierResultRequestDto { MaxResultCount = MaxNum })).Items; // Paging not implemented yet
            if (module.Count>0)
            {
                cuModule = module.First();
            }
           

            var model = new SupplierListViewModel
            {
                Supplier = cuModule,
                Suppliers=module
            };
          
            return View(model);
        }
 
        private readonly ISupplierAppService _supplierAppService;

        public SupplierController(ISupplierAppService supplierAppService)
        {
            _supplierAppService = supplierAppService;
           
        }

        public async Task<ActionResult> EditSupplierModal(int supplierId)
        {
            
            var module = await _supplierAppService.GetAsync(new EntityDto<int>(supplierId));

            CreateUpdateSupplierDto cuSupplier = ObjectMapper.Map<CreateUpdateSupplierDto>(module);
            var model = new EditSupplierModalViewModel
            {
                Supplier = cuSupplier
 
            };
           return View("_EditSupplierModal", model);

        }
}
}

 

6.在Visual Studio 2022的解决方案资源管理器,按F5运行应用程序。

7.在浏览器将呈现登录页面,然后输入管理员用户名进行登录。浏览器跳转到首页面,在主界面的菜单中,选择“Business->供应商管理”菜单项,浏览器中呈现一个供应商信息列表页面,我们发现此页面的顶部与右边的菜单部分缺失css,样式不好看。如下图。

abp(net core)+easyui+efcore实现仓储管理系统——供应商管理升级之上(六十三)

8. 在Visual Studio 2017的“解决方案资源管理器”中,右键单击在领域层“ABP.TPLMS.Web.Mvc”项目中的Views\Supplier目录。 找到Index.cshmtl文件,修改顶部的代码与按钮的代码。具体代码如下:

 

@using ABP.TPLMS.Web.Startup
@model ABP.TPLMS.Web.Models.Supplier.SupplierListViewModel
 

@{
    ViewData["Title"] = PageNames.Supplier;
}

@section scripts
    {
    <script src="~/view-resources/Views/Supplier/Index.js" asp-append-version="true"></script>

}
<section class="content-header">
    <div class="container-fluid">
        <div class="row">
            <div class="col-sm-6">
                <h1>@L("Supplier")</h1>
            </div>
            <div class="col-sm-4 text-sm-right">
                <a id="RefreshButton" href="javascript:void(0);"><i class="fas fa-redo-alt"></i></a>
            </div>
            <div class="col-sm-2">
                <button type="button" class="btn btn-primary btn-circle waves-effect waves-circle waves-float pull-right"
data-toggle="modal" data-target="#SupplierCreateModal"> <i class="fa fa-plus-square">Add</i> </button> </div> </div> </div> </section> <div class="row clearfix"> <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"> <div class="card"> <div class="body table-responsive"> <table class="table"> <thead> <tr> <th> @Html.DisplayNameFor(model => model.Supplier.Code) </th> <th> @Html.DisplayNameFor(model => model.Supplier.Name) </th> <th> @Html.DisplayNameFor(model => model.Supplier.LinkName) </th> <th> @Html.DisplayNameFor(model => model.Supplier.Mobile) </th> <th> @Html.DisplayNameFor(model => model.Supplier.Address) </th> <th> @Html.DisplayNameFor(model => model.Supplier.Tel) </th> <th> @Html.DisplayNameFor(model => model.Supplier.Status) </th> <th></th> </tr> </thead> <tbody> @foreach (var item in Model.Suppliers) { <tr> <td> @Html.DisplayFor(modelItem => item.Code) </td> <td> @Html.DisplayFor(modelItem => item.Name) </td> <td> @Html.DisplayFor(modelItem => item.LinkName) </td> <td> @Html.DisplayFor(modelItem => item.Mobile) </td> <td> @Html.DisplayFor(modelItem => item.Address) </td> <td> @Html.DisplayFor(modelItem => item.Tel) </td> <td> @Html.DisplayFor(modelItem => item.Status) </td> <td > <a href="#" class="btn btn-sm bg-secondary edit-supplier" data-supplier-id="@item.Id"
data-toggle
="modal" data-target="#SupplierEditModal"><i class="fas fa-pencil-alt"></i>@L("Edit")</a> <a href="#" class="btn btn-sm bg-danger delete-supplier" data-supplier-id="@item.Id"
data-supplier-name
="@item.Name"><i class="fas fa-trash"></i>@L("Delete")</a> </td> </tr> } </tbody> </table> </div> </div> </div> </div> <div class="modal fade" id="SupplierCreateModal" tabindex="-1" role="dialog" aria-labelledby="SupplierCreateModalLabel"
data-backdrop
="static"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title"> <span>@L("CreateNewSupplier")</span> </h4> </div> <div class="modal-body"> <form name="SupplierCreateForm" role="form" class="form-validation"> <div> <div class="row clearfix"> <div class="col-sm-6"> <div class="form-group form-float"> <div class="form-line"> <label asp-for="@Model.Supplier.Code" class="form-label"></label> <input type="text" name="Code" class="form-control" required maxlength="50" /> </div> </div> </div> <div class="col-sm-6"> <div class="form-group form-float"> <div class="form-line"> <label asp-for="@Model.Supplier.Name" class="form-label"></label> <input type="text" name="Name" class="form-control" required maxlength="50" /> </div> </div> </div> </div> <div class="row clearfix"> <div class="col-sm-12"> <div class="form-group form-float"> <div class="form-line"> <label asp-for="@Model.Supplier.Address" class="form-label"></label> <input type="text" name="Address" class="form-control" required maxlength="255" /> </div> </div> </div> </div> <div class="row clearfix"> <div class="col-sm-6"> <div class="form-group form-float"> <div class="form-line"> <label asp-for="@Model.Supplier.LinkName" class="form-label"></label> <input type="text" name="LinkName" class="form-control" /> </div> </div> </div> <div class="col-sm-6"> <div class="form-group form-float"> <div class="form-line"> <label asp-for="@Model.Supplier.Mobile" class="form-label"></label> <input type="text" name="Mobile" class="form-control" /> </div> </div> </div> </div> <div class="row clearfix"> <div class="col-sm-6"> <div class="form-group form-float"> <div class="form-line"> <label asp-for="@Model.Supplier.Tel" class="form-label"></label> <input type="text" name="Tel" class="form-control" required maxlength="255" /> </div> </div> </div> <div class="col-sm-6"> <div class="form-group form-float"> <div class="form-line"> <label asp-for="@Model.Supplier.Status" class="form-label"></label> <input type="text" name="Status" class="form-control" /> </div> </div> </div> </div> <div class="row clearfix"> <div class="col-sm-6"> <div class="form-line"> <label asp-for="@Model.Supplier.Sex"></label> <input name="Sex" type="text" class="form-control" /> </div> </div> <div class="col-sm-6"> <div class="form-line"> <label asp-for="@Model.Supplier.Email"></label> <input name="Email" type="text" class="form-control" /> </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-default waves-effect" data-dismiss="modal">@L("Cancel")</button> <button type="submit" class="btn btn-primary waves-effect">@L("Save")</button> </div> </form> </div> </div> </div> </div> <div class="modal fade" id="SupplierEditModal" tabindex="-1" role="dialog" aria-labelledby="SupplierEditModalLabel"
data-backdrop
="static"> <div class="modal-dialog" role="document"> <div class="modal-content"> </div> </div> </div>

 

原文链接:https://www.cnblogs.com/chillsrc/p/17372490.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:abp(net core)+easyui+efcore实现仓储管理系统——供应商管理升级之上(六十三) - Python技术站

(0)
上一篇 2023年5月8日
下一篇 2023年5月8日

相关文章

  • C#与C++枚举的区别对比和使用案例

    C#与C++枚举的区别对比和使用案例 枚举在C#和C++的基本定义 C#和C++中的枚举都是一组具有相同数据类型的常量。枚举定义的基本语法如下: C#: enum 枚举名称 { 枚举常量1, 枚举常量2, … } C++: enum 枚举名称 { 枚举常量1, 枚举常量2, … }; 在定义枚举时,常量的默认值从0开始自动递增。也可以给特定的枚举常量…

    C# 2023年5月15日
    00
  • C# 动态加载程序集信息

    C# 动态加载程序集信息是指在程序运行中,动态地从文件系统或网络中加载程序集信息,然后使用反射技术获取程序集中的类型信息并进行调用。这种动态加载程序集信息的方法通常用于实现插件式架构、程序集延迟加载等功能。 实现C# 动态加载程序集信息的步骤如下: 加载程序集 使用Assembly.Load方法,可以从文件系统或网络中加载程序集。如下面的代码: Assemb…

    C# 2023年6月1日
    00
  • jquery连缀语法如何实现

    jQuery连缀语法(Chaining)可以让我们在一个语句中使用多个jQuery方法,以及对元素进行多个操作。这样可以使代码更加紧凑、可读性更高,提升开发效率。 实现连缀语法的关键在于,每个jQuery方法都可以返回jQuery对象本身,使其在下一个方法中能够被继续使用。 下面将详细介绍如何实现jQuery连缀语法的完整攻略: 创建一个jQuery对象 我…

    C# 2023年6月6日
    00
  • c#(Socket)异步套接字代码示例

    让我来为您详细讲解一下“C#(Socket)异步套接字代码示例”的完整攻略。 什么是异步套接字 为了更好的理解这个示例,我们先来简单介绍一下异步套接字。 异步套接字(Asynchronous Socket)是一种非阻塞式的网络编程模型,通过异步套接字可以避免使用线程等多线程编程方式。异步套接字允许应用程序调用发送和接收函数,而不用等待这些函数完成,这样就可以…

    C# 2023年6月7日
    00
  • C#微信公众平台开发之高级群发接口

    C#微信公众平台开发之高级群发接口 微信公众平台提供了高级群发接口,可以用于向用户发送图文消息、语音消息、音乐消息、视频消息、小程序卡片消息等。 1. 获取access_token 在使用高级群发接口时,需要先获取到有效的access_token。可以使用以下接口获取: https://api.weixin.qq.com/cgi-bin/token?gran…

    C# 2023年6月1日
    00
  • C# TaskScheduler任务调度器的实现

    下面是详细讲解 “C# TaskScheduler任务调度器的实现” 的完整攻略: 1. 什么是C# TaskScheduler任务调度器 TaskScheduler任务调度器是一个在 .NET Framework中提供的接口,它允许您将任务提交给 .NET 线程池,并使这些任务在未来的某个时刻运行。使用任务调度器,可以创建多种不同的计划,以便在特定的情况下…

    C# 2023年6月6日
    00
  • 深入C# 内存管理以及优化的方法详解

    深入C# 内存管理以及优化的方法详解 在C#中,内存管理是一个非常重要的话题。由于C#运行于托管环境中,所以我们通常不需要手动管理内存。但是,仍然有一些情况需要我们了解和优化内存管理。本文将为你详细探讨C#内存管理和优化的方法,同时会提供一些示例。 内存管理 通常情况下,C#的垃圾回收器(GC)会自动管理内存。GC会自动回收无用的对象,并且为我们管理内存。但…

    C# 2023年6月7日
    00
  • 记一次 .NET某医疗器械清洗系统 卡死分析

    一:背景 1. 讲故事 前段时间协助训练营里的一位朋友分析了一个程序卡死的问题,回过头来看这个案例比较经典,这篇稍微整理一下供后来者少踩坑吧。 二:WinDbg 分析 1. 为什么会卡死 因为是窗体程序,理所当然就是看主线程此时正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ChildEBP RetAddr 00 00aff1…

    C# 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部