asp.net core后端+element ui tree树控件基本用法

30 篇文章 0 订阅
7 篇文章 0 订阅

最近前后端分离大行其道,苦了后端人员,需要学习的东西还不少。于是到网上看了看前端的教程。没想到前端发展到今天变得如此复杂。前端也包括权限和路由的东西。不过整体看上去似曾相识,只是需要熟悉些新的语法。昨天晚上试用了一下element ui。感觉这个框架还是不错的。学了vue,再也不想用jQuery了。不再直接操作dom,而是跟数据打交道。今后打算好好学习下vue,网上做出来的后端框架还是不少的。下面就记录以下element做前端,asp.net core做后端实现的一个树控件。

后端

  1. 首先涉及到树型结构,先上Model,这里以材料类型为例,类型可以嵌套,有的有父类。类型为Material:
using Newtonsoft.Json;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;

namespace TreeDemo.Models
{
    /// <summary>
    /// 材料类型
    /// </summary>
    public class MaterialType
    {
        /// <summary>
        /// id
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 材料类型名称
        /// </summary>
        [StringLength(50)]
        public string Title { get; set; }

        /// <summary>
        /// 父类Id
        /// </summary>
        
        public int? ParentId { get; set; }

        [JsonIgnore]
        [ForeignKey(nameof(ParentId))]
        public virtual MaterialType ParentType { get; set; }


        public virtual ICollection<MaterialType> MaterialTypes { get; set; }


        public static List<MaterialType> GetData(List<MaterialType> data)
        {
            var nodes = data.Where(x => x.ParentId == null).Select(x => new MaterialType
            {
                Id = x.Id,
                ParentId = x.ParentId,
                Title = x.Title
            }).ToList();
            foreach (var item in nodes)
            {
                item.MaterialTypes = GetChildrens(item, data);
            }
            return nodes;
        }

        private static List<MaterialType> GetChildrens(MaterialType item, List<MaterialType> data)
        {
            var children = data.Where(x=>x.ParentId==item.Id).Select(x=> new MaterialType
            {
                Id = x.Id,
                ParentId = x.ParentId,
                Title = x.Title
            }).ToList();
            foreach (var child in children)
            {
                child.MaterialTypes = GetChildrens(child, data);
            }
            return children;
        }
    }
}

  1. asp.net core比较省事,有了模型就可以直接生成增删改查页面和api。在visual studio中的Controllers文件夹上右键,选择添加->“新搭建的基架项目",选择如下图,再选择MaterialType作为模型,添加TreeDemoContext,做数据库上下文类。就可以直接生成增删改查页面。
    在这里插入图片描述
  2. 数据库ORM用的是Entity Framework Core。这里需要再TreeDemoContext类中,配置以下表关系:
    (树形结构的关系配置可以参考我之前写的一篇文章:
    Entity Framework Core树状结构增删改查)
using Microsoft.EntityFrameworkCore;
using TreeDemo.Models;

public class TreeDemoContext : DbContext
{
    public TreeDemoContext(DbContextOptions<TreeDemoContext> options)
        : base(options)
    {
    }

    public DbSet<MaterialType> MaterialType { get; set; }
   //配置树状结构表关系
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MaterialType>()
            .HasMany(x => x.MaterialTypes)
            .WithOne(x => x.ParentType)
            .HasForeignKey(x => x.ParentId)
            .OnDelete(DeleteBehavior.ClientSetNull);
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        base.OnConfiguring(optionsBuilder);
    }

}
  1. 生成的创建页面(create.cshtml)需要稍微修改以下,因为默认select选项为第一个,修改的目的是让select一开始为空:
@model TreeDemo.Models.MaterialType

@{
    ViewData["Title"] = "Create";
}

<h1>Create</h1>

<h4>MaterialType</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Title" class="control-label"></label>
                <input asp-for="Title" class="form-control" />
                <span asp-validation-for="Title" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="ParentId" class="control-label"></label>

                <select asp-for="ParentId" class="form-control" asp-items="ViewBag.ParentId">
                    <option value="">选择父类型</option>
                </select>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-action="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

  1. 增删改查页面好了,通过页面添加几个示例数据:
    在这里插入图片描述

  2. 在按照步骤二,生成MaterialType的增删改查api。

  3. 替换System.Text.Json包,这里通过nuget安Newtonsoft.Json和Microsoft.AspNetCore.Mvc.NewtonsoftJson包,在Startup中配置json格式。为啥配置:因为System.Text.Json不支持循环引用,树中的children在序列化时,会引发循环引用错误。

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
//在ConfigureServices中添加
services.AddControllersWithViews().AddNewtonsoftJson(options=>
            {
                //忽略循环引用
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                //不使用驼峰样式的key
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                //设置时间格式
                options.SerializerSettings.DateFormatString = "yyyy-MM-dd";
            });
  1. 配置跨域配置:
    (1). 在appsettings.json中添加
  "AppCores": "http://localhost:8080,http://localhost:8081",

(2) 在startup类的ConfigureService方法中配置跨域:

services.AddCors(options => options.AddPolicy("AllowAll", policy => policy.WithOrigins(cores).AllowAnyMethod().AllowAnyHeader().AllowCredentials()));

(3) 还需要再api的方法中启用跨域:

 [EnableCors("AllowAll")]
 [HttpGet]
   public async Task<ActionResult<IEnumerable<MaterialType>>> GetMaterialType()
   {

       return await _context.MaterialType.ToListAsync();
   }

后端到此结束

前端

1.创建vue项目

vue create treedemo
  1. 安装element 和axios
npm install element-ui -S
npm install axios --save
  1. 再main.js中引用element ui和axios
import Vue from "vue"
import App from "./App.vue"
import ElementUI from "element-ui"
import "element-ui/lib/theme-chalk/index.css"
import axios from "axios"

axios.defaults.baseURL = "https://localhost:44356"
Vue.use(ElementUI)
Vue.prototype.$http = axios
Vue.config.productionTip = false

new Vue({
  render: h => h(App)
}).$mount("#app")
  1. 在App.vue中编写页面,替换原来的内容:
<template>
  <div id="app">
    <el-tree
      :data="materialTypesData"
      :props="{ children: 'MaterialTypes', label: 'Title' }"
      @node-click="handleMaterialTypeNodeClick"
    ></el-tree>
  </div>
</template>

<script>
  export default {
    name: "App",
    data() {
      return {
        materialTypesData: []
      }
    },
    mounted() {
      this.getMaterialTypes()
    },
    methods: {
      //远程获取数据
      getMaterialTypes() {
        this.$http
          .get("https://localhost:44356/api/materialtypes/tree")
          .then(res => {
            console.log(res)
            this.materialTypesData = res.data
          })
      },
      //树节点点击事件
      handleMaterialTypeNodeClick(data) {
        this.$message("test" + data)
      }
    }
  }
</script>

<style></style>

  1. 运行:后端在visual studio中按ctrl+F5运行,前端在vscode终端中输入npm run serve运行,运行效果:在这里插入图片描述
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "ASP.NET Core PC手机微信商城源码.zip"是一个包含ASP.NET Core项目的源代码压缩文件,旨在构建一个适用于PC和手机的微信商城应用程序。 该压缩文件包含了适用于ASP.NET Core框架的源代码。ASP.NET Core是一个开源的跨平台框架,用于构建现代化的Web应用程序。它具有高性能、模块化、可扩展性和跨平台的特点。 该源码文件的目标是构建一个适用于PC和手机的微信商城。微信商城是一个基于微信公众号平台的电子商务平台,用户可以在微信上购买商品、下订单、评论商品等。 通过使用这个源代码文件,开发者可以参考ASP.NET Core的最佳实践,快速搭建自己的微信商城应用程序。它提供了对PC和手机的支持,使得用户可以在不同的设备上访问商城。 源代码文件的内容可能包括商城的前端页面、数据库架构、后端逻辑等。开发者可以根据自己的需求进行修改和定制,以满足特定的商城功能和设计要求。 总之,"ASP.NET Core PC手机微信商城源码.zip"是一个包含ASP.NET Core项目的源代码压缩文件,能够帮助开发者搭建适用于PC和手机的微信商城应用程序,并加快开发过程。 ### 回答2: asp.net core pc 手机 微信商城源码.zip是一个用asp.net core框架开发的微信商城的源代码压缩包。该源码包含了商城的前端和后端代码,适用于pc端和手机端。 asp.net core是微软推出的开源框架,具有高性能、跨平台等特点。使用asp.net core开发商城能够提供稳定性和可靠性,并且能够轻松适应不同大小屏幕的显示。 商城源码中包含了前端页面的设计和开发,以及后端代码的逻辑和功能实现。前端页面设计精美且响应式布局,能够自动适应不同设备的屏幕大小。后端代码使用了asp.net core框架提供的特性,包括MVC模式、身份验证、数据持久化等功能。 通过该微信商城源码,可以实现在线购物、商品展示、下单支付等功能。同时,商城还支持微信登录、微信支付等与微信公众号的交互功能。商家可以管理商品信息、订单管理、用户管理等功能。 总之,asp.net core pc 手机 微信商城源码.zip提供了一个完整的微信商城解决方案,能够帮助开发者快速搭建一个功能完善且适应不同设备的商城平台。 ### 回答3: asp.net core pc 手机 微信商城源码.zip 是一个包含了使用asp.net core开发的微信商城的源代码的压缩文件。 微信商城是一款基于微信平台开发的电商系统,用户可以在微信中浏览和购买商品,进行在线支付等操作。该源码使用asp.net core作为开发框架,兼容pc和手机两个平台,可以在多个设备上运行和使用。 asp.net core 是微软推出的一种跨平台的开发框架,它结合了传统的ASP.NET和新一代的.net core技术,具有高效、灵活、可扩展等特点。使用asp.net core开发商城系统可以提高开发效率,减少Bug和安全性问题。 该源码包含了商城系统的各个功能模块,如商品管理、用户管理、订单管理、支付接口等。开发人员可以通过修改和定制源码,根据自己的需求来搭建自己的微信商城系统。 当你拿到这个源码包后,可以解压缩并使用asp.net core开发工具打开,然后根据其中的说明文档来配置和运行项目。在运行项目之前,需要先安装和配置好asp.net core的开发环境,并且熟悉asp.net core的开发流程、工具和技术。 总之,asp.net core pc 手机 微信商城源码.zip 是一个基于asp.net core开发的微信商城系统的源代码文件,通过该源码可以快速搭建和定制自己的微信商城系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值