ASP.NET Core(二)

路由

现在我们在管道中间就是使用了路由中间件,这个**中间件就可以检查在应用中注册的这些端点,**这些端点有可能是被MVC这个框架注册的,也有可能是RAZOR PAGE或者SINGLE IR或其他给注册的。
在这里插入图片描述

这个时候这个中间件就会判断进来的http请求,它是在哪个端点上出现的。

判断在哪个端点上出现的之后呢,这是个重要信息。这样就可以让后面的中间件知道这个信息。

而如果后续的中间件需要知道这条重要的信息的话,那么这些中间件也可以知道这些端点是谁注册的

因为我们MVC这个应用,肯定需要使用html,javascript、CSS等这些静态文件,所以我需要使用UseStaticFiles这个中间件,这样我们的Web文件就可以摄入这些静态文件了。不使用这个中间件,静态文件根本从客户端访问不到。

创建wwwroot文件夹,这个文件夹下面都是静态资源,我们创建images文件夹,同时放进一个图片

通过运行程序,输入网址。
在这里插入图片描述

之所以能看到猫猫头图片,是因为我们使用了app.UseStaticFiles();这个中间件

包管理

我们的Web应用呢,通常分为前端和后端

服务器端(后端):Nuget

服务器端就是我们ASP.NET Core写C#代码这块,这块我们使用Nuget

前端:Npm

前端的一些UI库、CSS等这些库,使用Npm这个包管理工具

使用MVC相关技术

因为跟部门有一个多对一的关系,所以有一个外键
部门接口下我写了四个方法
在这里插入图片描述

然后再看一下实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

首先做一个list ,readonly private,里面是放了部门这个类型

然后在构造函数里面我添加了三个部门。

Employee的实现跟Department一样。
在这里插入图片描述
在这里插入图片描述

依然是先在构造函数里面添加一些员工。

写完类和接口以后,接下来要做的就是注册这两个服务

Controller

注册完服务之后,我们建立Controller
在这里插入图片描述

public DepartmentController(),()里面我们需要IDepartmentService它的实现类,所以我把接口注入一下就可以了

这就是构造函数注入

注入之后呢,给它赋给一个本地的只读的变量。

下面我们建立async,默认的路由就是Index.

public async Task<IActionResult> Index()
		{
			ViewBag.Title = "Department Index";
			var departments = _departmentService.GetAll();
			return View(departments);
		}

		[HttpGet]
		public IActionResult Add()
		{
			ViewBag.Title = "Add Department";
			return View(new Department());
		}
		[HttpPost]
		public async Task<IActionResult> Add(Department model)
		{
			if(ModelState.IsValid)
			{
				await _departmentService.Add(model);
			}
			return RedirectToActionResult(nameof(Index));

使用ViewBag这个属性,再使用Title这个属。

第二个action的作用,我是想让他跳转页面,所以它不是异步的

表单提交都应该使用HttpPost 默认不写的话就会使用[HttpGet]

public async Task<IActionResult> Add(Department model)

这个model进来之后,我们得判断这个model属性填没填,判断一下它的是否合法。

在MVC里呢,我们使用ModelState.IsValid可以判断这个model是否是合法的。同时,在传参数的时候已经对他有了一个验证,并且把验证结果放在if里面了。如果合法,我们就可以通过Service进行添加的操作。最后返回列表页面。

写字符串也可以,但是写nameof有利于重构(重命名)

接下来我们再写EmployeeController,别忘了也要继承Controller类

这个Controller里,我注入了两个Service,下面还是那几个方法。

public class EmployeeController : ControllerBase
	{
		private readonly IDepartmentService _departmentService;
		private readonly IEmployeeService _employeeService;

		public EmployeeController(IDepartmentService departmentService,IEmployeeService employeeService)
		{
			_departmentService = departmentService;
			_employeeService = employeeService;
		}
public async Task<IActionResult> Index(int deaprtmentId)
		{
			var department = await _departmentService.GetById(deaprtmentId);

			ViewBag.Title = $"Employees of {department.Name}";
			ViewBag.DepartmentId = departmentId;

			var employees = await _employeeService.GetByDepartmentId(departmentId);

			return View(employees);
		}

Index呢,因为我要展现这个部门下的所有员工,所以需要传一个参数departmentId

var department = await _departmentService.GetById(deaprtmentId);

通过deaprtmentId,通过_departmentService获得这个部门,

ViewBag.Title = $"Employees of {department.Name}";

然后设一下这个标题,说它是哪个部门的

ViewBag.DepartmentId = departmentId;

然后再设另外一个变量叫做departmentId(我们前台的view可能会用到)

var employees = await _employeeService.GetByDepartmentId(departmentId);

			return View(employees);

再就是我通过我通过departmentId,通过_employeeService,把它下面的所有员工全部取出来,并传到这个View里面。

第二个方法是添加,添加也是针对某个部门的员工进行添加。

public IActionResult Add(int departmentId)
		{
			ViewBag.Title = "Add Employee";
			return View(new Employee
			{
				departmentId = departmentId
			});
		}

也就是需要把departmentId传进来,然后返回一个Model到页面,页面的Model呢设好了departmentId。

在表单提交之后,会走接下来的Add方法,把新员工传进来,然后判断一下这个Model是否都是合法的,
合法的话我们就会执行

await _employeeService.Add(model)

这个方法

然后返回到员工列表页面,页面呢需要一个参数,所以说得写这个方法的第二个参数,我们就需要把departmentId给传进来

return RedirectToAction(nameof(Index), new { departmentId = model.DepartmentId })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值