这一节,我们来测试一下,我另一个数据表BPSOut,包片商每天出去的记录情况表的使用。
1.这个表准备是让他在前台手机页面显示,并进行增删修改
2.我想对这个表进行初始化:打开查看页面(index)页面的时候,判断是否有当日数据,没有的时候,从包片商BaoPianShang那个表将这所有包片商信息都初始化增加一条当日的数据
3.不同区域的管理人员,进行自己包片商的当日出去的记录进行修改和增加

新建控制器-用魔方后台管理这个表功能

  • 这里就先实现包片商出去表BPSOut的控制器。
  • 新建文件夹Areas/Business/Controllers,新建BPSOutController控制器,填入以下内容。 ``` using System; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; using jsdhh.Areas.Business.Models.Entity; using Microsoft.AspNetCore.Mvc; using NewLife.Cube; using NewLife.Web; using XCode.Membership;

namespace jsdhh.Areas.Business.Controllers { [BusinessArea] [DisplayName(“包片商日行销”)] public class BPSOutController : EntityController { protected override IDictionary ScanActionMenu(IMenu menu) { menu.Visible = true; return base.ScanActionMenu(menu); }

  1. }

}

  1. - 然后生成后,F5,可以看见能管理拉
  2. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1174002/1609053475363-e1421878-f4e7-4c54-aa4b-be29c5662361.png#align=left&display=inline&height=198&margin=%5Bobject%20Object%5D&name=image.png&originHeight=198&originWidth=879&size=21925&status=done&style=none&width=879)<br />为什么要这个哩,因为我感觉这个很实用,在后台内置好了批处理,批删除,选中删除,后台修改等。<br />下面我们正式从前台开始
  3. <a name="ldr2H"></a>
  4. ### 改修Home控制器,修改home的首页内容
  5. 但一开始就发现一个问题,系统不是自带有home控制器,也有home视图,可是F5HOME是不能显示的。<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/1174002/1609053971960-0a730b97-1de6-446f-9414-fd3f4528b083.png#align=left&display=inline&height=164&margin=%5Bobject%20Object%5D&name=image.png&originHeight=164&originWidth=1140&size=18958&status=done&style=none&width=1140)
  6. - 这个太郁闷了,这个改Startup.cs 的时候,把路由功能删了,需要增加回来,
  7. - 完整的Startup.cs 代码。

using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using NewLife.Cube;

namespace jsdhh { 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.AddControllersWithViews(); // 2020-12-26添加
        services.AddCube();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseCube(env);
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

}


- 然后就可以访问HOMe页面拉
- w但是你会发现CSS没有生效,我的个乖,我也搞不懂哩。
- 然后我在admin页面,去查看,他集成了Bootstrap3,然后地址是

<link rel="stylesheet" href="/Content/bootstrap/css/bootstrap.min.css"><br />所以我在布局页面_Layout.cshtml中进行更改,上面加上<br />    <link rel="stylesheet" href="/Content/bootstrap/css/bootstrap.min.css"> <br />    <link rel="stylesheet" href="/Content/bootstrap/css/font-awesome.min.css"><br />    <link rel="stylesheet" href="/jsdhh.css"><br />这个jsdhh.css是我微调其他样式的时候使用。<br />下面加上<br />    <script src="/Content/js/jquery-2.1.3.min.js"></script><br />  <script src="/Content/bootstrap/js/bootstrap.min.js"></script><br />然后发现样式已正常。

<a name="OiOt2"></a>
### 进行控制器,显示HOME页面,并按标题名进行搜索显示
我们先按最先的意图,一个是HOME页面,一个是显示包片商出去的营销总表,一个是新增记录。<br />在HOME控制器中,增加一个BPSOutALL的视图<br />   public IActionResult BPSOutALL()<br />        {<br />            return View();<br />        }<br />上面是home控制器中增加一个BPSOutALL(),然后新建视图,下面是大体的初始模样<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/1174002/1609077844576-306e1ea6-aedf-4510-8d13-620622516303.png#align=left&display=inline&height=593&margin=%5Bobject%20Object%5D&name=image.png&originHeight=593&originWidth=411&size=13176&status=done&style=none&width=411)

- 下面开始写代码:

       要达到进这个页面的时候,是显示包片商当天的出去记录,所以先分析当天的记录是否存在,如是存在,则调用,否则,直接初始化,从包片商的表的取出所有数据,进行写入这个BPSOut这个表,并显示。

- 先看一下控制器的代码

public IActionResult BPSOutALL() { //设今天的日期的变量//2005-11-5 var xdate =DateTime.Now.ToShortDateString().ToString(); var xBPSOutAll= BPSOut.FindAll(BPSOut..OutTime.Between(DateTime.Now.Date, DateTime.Now.AddDays(1).Date)); if (xBPSOutAll.Count == 0) { //当读不出数据的时候表示当天没有记录,先读出包片商的表。 var xBaoPianShang = BaoPianShang.FindAll(); foreach (var item in xBaoPianShang) { BPSOut newbpsout = new BPSOut { OutTime = DateTime.Now, County = item.County, Region = item.Region, GridName = item.GridName, BPSName = item.BPSName, WHYName = item.WHYName, WHYNameTel = item.WHYNameTel, QDJLName = item.QDJLName, QDJLNameTel = item.QDJLNameTel, OutExplain = “无”, Bei1=item.Bei1, Bei2=item.Bei2, Bei3=item.Bei3 }; newbpsout.Insert(); } var xBPSOutAll1 = jsdhh.Areas.Business.Models.Entity.BPSOut.FindAll(BPSOut..OutTime == DateTime.Now.Date); return View(xBPSOutAll1); }

        return View(xBPSOutAll);
    }
前台的代码

@ For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 @ @{ } @model IList

当日行销情况

@foreach (var item in Model) { }

支局 包片商 渠道 出门
@Html.DisplayFor(modelItem => item.Region) @Html.DisplayFor(modelItem => item.BPSName) @Html.DisplayFor(modelItem => item.QDJLName) @Html.DisplayFor(modelItem => item.OutExplain) 详情

- 看一下显示效果 ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1174002/1609083630397-56fbc641-cf60-4bb9-a6bd-5cd887818478.png#align=left&display=inline&height=577&margin=%5Bobject%20Object%5D&name=image.png&originHeight=577&originWidth=378&size=35967&status=done&style=none&width=378)<br />点击标题查寻该店的近10天的记录<br />先对标题那个TAD增加一个变量 @Html.DisplayFor(modelItem => item.BPSName) 因为包片商名字好长,所以我新建了一个视图BPSOutALLSeach进行管理。 public IActionResult BPSOutALLSeach(string BPSName) { //如果没有点击包片商名称,即搜索字段不为空,取大于8天前的数据 if (!String.IsNullOrEmpty(BPSName)) { var xbpsname1 = ViewBag.xbpsname1; var xBPSOutAll2 = BPSOut.FindAll(BPSOut._.BPSName.Contains(BPSName)); return View(xBPSOutAll2); } return View(); } 然后效果图,当然还没有美化,这只是大概。<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/1174002/1609088155888-00005294-e7c9-4234-a65f-fbeac7fd5208.png#align=left&display=inline&height=580&margin=%5Bobject%20Object%5D&name=image.png&originHeight=580&originWidth=343&size=16585&status=done&style=none&width=343) <a name="4IgRd"></a> ### 控制内容字段显示长度 - 出行内容有时很多,比如几十个,在列表显示的时候怎么让他显示少的数字哩。 - 在前台中这样操作。对取出的进行分析,当大于10个数字的时候,进行截取。 @{ var yyy=item.OutExplain.Length > 13 ? item.OutExplain.Substring(0, 13)+”…” : item.OutExplain; } @yyy 效果如下,下面的出门字段内容,当超过的时候。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1174002/1609770709307-adbf7499-8e6d-4642-b797-874659ce3255.png#align=left&display=inline&height=554&margin=%5Bobject%20Object%5D&name=image.png&originHeight=554&originWidth=307&size=36899&status=done&style=none&width=307) <a name="TFhla"></a> ### 点击查看详情页面 - 通过点击某列的详情,查看到该个记录的详细情况。 public IActionResult Details(int ID) { //通过ID,搜到记录返回MODEL var seacherID = BPSOut.FindByID(ID); return View(seacherID); } - 然后增加视图。 @ For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 @ @{ } @model jsdhh.Areas.Business.Models.Entity.BPSOut
@Model.BPSName
@Model.OutTime
@Model.Region
@Model.QDJLName
@Model.WHYName
@Model.OutExplain
@Model.Bei2


- 效果如下,还没有美化。

![image.png](https://cdn.nlark.com/yuque/0/2021/png/1174002/1609774560452-fd931709-278c-4d8b-be7b-2ecee8d262ca.png#align=left&display=inline&height=563&margin=%5Bobject%20Object%5D&name=image.png&originHeight=563&originWidth=335&size=21044&status=done&style=none&width=335)
<a name="iZbnq"></a>
### 修改记录数据

- 在上面的详细页面中增加一个链接到修改该 ID

![image.png](https://cdn.nlark.com/yuque/0/2021/png/1174002/1609847993900-7a41eda4-3657-4863-bfa3-2fe1054524c9.png#align=left&display=inline&height=187&margin=%5Bobject%20Object%5D&name=image.png&originHeight=187&originWidth=414&size=10423&status=done&style=none&width=414)

- 然后我们增加一个EDIT 的GET方法 。读取该ID的相关信息,并显示编辑表单

public IActionResult Edit(int ID) { var bpsout = BPSOut.FindByID(ID); return View(bpsout); }


- 生成视图
- 前台代码,因为只需要修改两个字段,其他的均为自动生成,或是不允许修改。

@model jsdhh.Areas.Business.Models.Entity.BPSOut

@Model.BPSName

编写内容

&nbsp&nbsp 取消

- 效果

![image.png](https://cdn.nlark.com/yuque/0/2021/png/1174002/1609849186673-29f38b89-6ff1-4ac2-afb5-ab77ff178e5f.png#align=left&display=inline&height=553&margin=%5Bobject%20Object%5D&name=image.png&originHeight=553&originWidth=311&size=18874&status=done&style=none&width=311)

- 然后再写POST的Edit方法

[HttpPost] [ValidateAntiForgeryToken] public IActionResult Edit(int ID, BPSOut bpsout) { if (ID != bpsout.ID) { return NotFound(); }

        if (ModelState.IsValid)
        {
            bpsout.Update();
            return RedirectToAction(nameof(Index));
        }
        return View(bpsout);
    }

```