C#加Vue MVC+Vue快速开发

6 篇文章 0 订阅
4 篇文章 0 订阅

首先创建项目
在这里插入图片描述
在这里插入图片描述
创建后大概的样子
在这里插入图片描述
1.配置Startup.cs

1.添加服务器端缓存
2.使用服务器端缓存
3.修改启动项为Home控制器下的Home视图

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Supply_System
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching();//1.添加服务器端缓存
            services.AddControllersWithViews();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseResponseCaching();//2.使用服务器端缓存

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Home}/{id?}");//3.修改启动项为Home控制器下的Home视图
            });
        }
    }
}

2.在Models文件夹下添加两个实体类

1.SupplyDemandsViewModel
2.TypeViewModel

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

namespace Supply_System.Models
{
    public class SupplyDemandsViewModel
    {
        public int Id { get; set; }
        public string SupplyDemandTitle { get; set; }
        public string SupplyDemandDetail { get; set; }
        public string CreateTime { get; set; }
        public int CreateUserId { get; set; }
        public int TypeId { get; set; }
        public string TypeName { get; set; }
        public bool IsRecommend { get; set; }
        public bool IsDel { get; set; }
        public static List<SupplyDemandsViewModel> ListAll()
        {
            List<SupplyDemandsViewModel> supplyDemands = new List<SupplyDemandsViewModel>();
            for (int i = 0; i < 8; i++)
            {
                bool IsRecommend = false;
                if (i > 4)
                {
                    IsRecommend = true;
                }
                supplyDemands.Add(new SupplyDemandsViewModel
                {
                    Id = 1,
                    SupplyDemandTitle = "v-if",
                    SupplyDemandDetail = "",
                    CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    CreateUserId = 1,
                    TypeId = 1,
                    TypeName = "Vue控件",
                    IsRecommend = IsRecommend,
                    IsDel = false
                });
            }
            for (int i = 0; i < 8; i++)
            {
                bool IsRecommend = false;
                if (i > 4)
                {
                    IsRecommend = true;
                }
                supplyDemands.Add(new SupplyDemandsViewModel
                {
                    Id = 1,
                    SupplyDemandTitle = "vm",
                    SupplyDemandDetail = "",
                    CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    CreateUserId = 1,
                    TypeId = 2,
                    TypeName = "Vue语法",
                    IsRecommend = IsRecommend,
                    IsDel = false
                });
            }
            for (int i = 0; i < 8; i++)
            {
                bool IsRecommend = false;
                if (i > 4)
                {
                    IsRecommend = true;
                }
                supplyDemands.Add(new SupplyDemandsViewModel
                {
                    Id = 1,
                    SupplyDemandTitle = "商城",
                    SupplyDemandDetail = "",
                    CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    CreateUserId = 1,
                    TypeId = 3,
                    TypeName = "Vue实战",
                    IsRecommend = IsRecommend,
                    IsDel = false
                });
            }
            return supplyDemands;
        }
    }
    
}

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

namespace Supply_System.Models
{
    public class TypeViewModel
    {
        public int Id { get; set; }
        public string TypeName { get; set; }
        public string Url { get; set; }
        public static List<TypeViewModel> ListAll()
        {
            List<TypeViewModel> navViewNodels = new List<TypeViewModel>();
            navViewNodels.Add(new TypeViewModel
            {
                Id = 1,
                TypeName = "Vue控件",
                Url = ""
            });
            navViewNodels.Add(new TypeViewModel
            {
                Id = 2,
                TypeName = "Vue语法",
                Url = ""
            });
            navViewNodels.Add(new TypeViewModel
            {
                Id = 3,
                TypeName = "Vue实战",
                Url = ""
            });
            return navViewNodels;
        }
    }
}

3.修改HomeController控制器

1.添加浏览器端缓存
2.加载栏目数据
3.加载栏目对应的内容数据

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Supply_System.Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

namespace Supply_System.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

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

        public IActionResult Index()
        {
            return View();
        }
        [ResponseCache(Duration = 600)]/*1.浏览器端缓存*/
        public IActionResult Home()
        {
            return View();
        }
        [ResponseCache(Duration = 600)]
        public IActionResult GetNavs()/*2.加载栏目数据*/
        {
            return new JsonResult(TypeViewModel.ListAll());
        }
        [ResponseCache(Duration = 600)]
        public IActionResult GetSuppys ()/*3.加载栏目对应的内容数据*/
        {
            return new JsonResult(SupplyDemandsViewModel.ListAll());
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

4.修改_Layout.cshtml视图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - Supply_System</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link rel="stylesheet" href="~/css/site.css" />
    <script src="~/lib/Vue/vue.min.js"></script>
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div id="navs" class="container">
                <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Home">主页</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item" v-for="nav in navs">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">{{nav.typeName}}</a>
                        </li>
                        @*<li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Vue控件</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Vue语法</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Vue实战</a>
                        </li>*@
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>

    <footer class="border-top footer text-muted">
        <div class="container">
            &copy; 2021 - Supply_System - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
        </div>
    </footer>
    <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>
    @RenderSection("Scripts", required: false)
</body>
</html>
<script>
    var vm = new Vue({
        el: "#navs",
        data: {
            navs:[]
        },
        mounted() {
            this.getNavs();
        },
        methods: {
            getNavs() {
                var that = this;
                $.get("/Home/GetNavs", {}, function (res) {
                    that.navs = res;
                    console.log(res)
                })
            }
        }
    });
</script>

5.修改Home.cshtml视图

@{
    ViewData["Title"] = "Home Page";
}
<script src="~/lib/Vue/vue.min.js"></script>
<style>
    ul {
        list-style: none;
        margin: 10px;
        float: left;
    }

        ul li {
            font-size: 18px;
        }
    /*    ul li {
        float: left;
    }*/
</style>
<div id="HomePage">
    <div style="margin-left:50px;">
        <p>请输入关键字</p>
        <input type="text" v-model="searchText" placeholder="请输入需要搜索的关键字" />
        @*<button @@click="search()">搜索</button>*@@*click前面添加两个@@符号是因为C#定义一个@会转换为后端语言*@
        <button v-on:click="search()">搜索</button>
    </div>
    <div v-show="showSearch==false">
        <ul>
            <li><h3>推荐信息</h3></li>
            <li v-for="supply in getSupplyByRecommend">{{supply.supplyDemandTitle}}</li>
        </ul>
    </div>
    <div v-show="showSearch==false" v-for="type in types">
        <ul>
            <li><h3>{{type.typeName}}</h3></li>
            @*字段首字母要小写*@
            <li v-for="supply in getSupplysByTypeId(type.id)">{{supply.supplyDemandTitle}}</li>

        </ul>
    </div>
    <div v-show="showSearch==true">
        <p style="margin-left:50px;">搜索内容</p><button v-on:click="backAll()">返回</button>
        <ul v-if="searchRes.length > 0">
            <li v-for="supply in searchRes">
                {{supply.supplyDemandTitle}}
            </li>
        </ul>
        <div v-else>
            您搜索的内容尚不存在
        </div>
    </div>

    @*<div>
            <ul>
                <li>Vue控件</li>
                <li>v-if</li>
                <li>v-show</li>
                <li>v-text</li>
                <li>v-model</li>
                <li>v-for</li>
                <li>v-bind</li>
            </ul>
        </div>
        <div>
            <ul>
                <li>Vue语法</li>
                <li>vm</li>
                <li>data</li>
                <li>methods</li>
            </ul>
        </div>
        <div>
            <ul>
                <li>Vue实战</li>
                <li>商城</li>
                <li>官网</li>
                <li>后台管理</li>
            </ul>
        </div>*@
</div>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script>
    var vmHome = new Vue({
        el: "#HomePage",
        data: {//定义变量
            types: [],
            supplys: [],
            searchText: null,
            searchRes: [],
            showSearch: false
        },
        mounted() {
            this.getNavs();
            this.getSupplys();
        },
        methods: {
            getNavs() {
                var that = this;
                $.get("/Home/GetNavs", {}, function (res) {
                    that.types = res;
                    console.log(res)
                })
            },
            getSupplys() {
                var that = this;
                $.get("/Home/GetSuppys", {}, function (res) {
                    that.supplys = res;
                    console.log(res)
                })
            }
            //,
            //getSupplysByTypeId(typeId) {
            //    return this.supplys.filter(m => m.typeId == typeId);
            //}
            , search() {
                console.log(this.searchText);
                if (this.searchText == null) {
                    alert("您尚未输入内容!");
                } else {
                    this.searchRes = this.supplys.filter(m => m.supplyDemandTitle.includes(this.searchText));
                    this.showSearch = true;
                }
                
            },
            backAll() {
                this.showSearch = false;
                this.searchText = null;
            }
        },
        computed: {/*computed下定义的是属性,不能直接定义方法,但是可以在其属性下定义方法*/
            getSupplyByRecommend(){
                return this.supplys.filter(m=>m.isRecommend==true);
            },
            getSupplysByTypeId() {
                //无法像methods中那样直接定义方法,该处的getSupplysByTypeId()是一个属性,所以也不能传参,但是可以在该属性下定义一个方法
                return function (typeId) {
                    return this.supplys.filter(m => m.typeId == typeId);
                }
            }
        }
    })
</script>

在这里插入图片描述
在这里插入图片描述

媳妇买了只狗,没事干就拿着人民币让狗闻。老公感觉很奇怪,就问:”老婆,你这是干吗,让狗去给你大马路上捡钱?“媳妇神秘地一笑:”以后你就知道了!“几星期后,老公的私房钱不见了。

  • 1
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值