VSCode创建ASP.NET Core MVC项目(2:实现新增、删除、修改功能)

  接着上一篇文章,继续实现基于MVC的电影数据新增、删除和修改功能。

新增电影数据功能

  直接复用之前项目中的新增页面(需要根据上一篇文章中的说明对页面内容进行微调)。点击首页中的新增数据链接时,其关联的URL是“https://localhost:5001/Movie/Create”,根据在StartUp文件的Configure配置的路由模板,程序应该请求调用MovieController中的Create函数处理,此时应该调用控制器中响应Get请求的Create函数,由于该页面是新增数据,不需要从首页中传递参数,因此控制器中的响应Get的新增函数Create没有输入参数。根据参考文献,控制器中的公开函数默认用于响应Get请求。函数比较简单,直接返回 View(),也即根据Views/Movie中的Create页面模板生成响应内容。如下图所示,用户在新建页面中填写数据。
在这里插入图片描述
  页面编制好之后,点击Create按钮提交新增数据,此时form标签中的提交URL与之前在首页中的新增数据的URL相同,但是变成了post请求。为了在控制器类中区分名称相同的函数的响应类型,使用[HttpPost]特性标识函数响应post请求(响应相同请求的同名函数以函数签名区分)。如果数据类中的属性很多,新建时只想让用户填写其中的部分内容,可以使用Bind特性设置想要更改的属性(本项目中的电影类属性数量有限,不用Bind也可以)。在响应post请求的Create函数中,如果正常保存,则调用RedirectToAction函数跳转会首页。新增数据操作至此结束。
在这里插入图片描述

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

        // POST: Movies/Create
        [HttpPost]
        public IActionResult Create([Bind("Id,Title,ReleaseDate,Genre,Price, Rating")] Movie movie)
        {
            if (ModelState.IsValid)
            {
                _context.Add(movie);
                _context.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(movie);
        }

在这里插入图片描述

删除电影数据功能

  删除电影数据,其逻辑是先显示详情页,然后点击删除按钮删除数据,删除后返回主页面。由于需要显示详情页,在从主页面调用控制器类中响应Get请求的delete函数中须获取数据标识,即数据Id,同时在点击删除按钮时,也是调用控制器类中响应post请求的delete函数,同时传入要删除的数据Id。由于重载函数的函数签名不能重复,在项目中将响应post请求删除数据的函数命名为DeleteConfirmed,同时使用HttpPost和ActionName标识该函数响应action为Delete的post请求,这样就避免了函数签名重复。

		public IActionResult Delete(int? id)
        {            
            ...
        }

   
        // POST: Movies/Delete/5
        [HttpPost, ActionName("Delete")]
        public IActionResult DeleteConfirmed(int id)
        {
       		...
        }

  程序的操作截图如下所示,点击Delete按钮,删除数据后返回主页面,此时数据已被删除。
在这里插入图片描述在这里插入图片描述

编辑电影数据功能

  编辑电影数据的逻辑与删除数据类似,从主页跳转到编辑页面时,调用控制类中的编辑函数并传入数据Id,编辑完成后点击save按钮保存数据,后者的操作是调用控制器类中响应post请求的编辑函数,该函数的签名如下所示:

public IActionResult Edit(int id, [Bind("Id,Title,ReleaseDate,Genre,Price,Rating")] Movie movie)

  开始比较纳闷,表单如何将这两个参数传递给函数,因为表单中的输入字段对应这电影类中的各个属性,没有多的内容。随后查看生成页面的源码(如下图所示),表单标签中的action链接中是包含了数据Id的,函数的输入参数应该一个来自表单action中的URL,另一个movie参数是程序将表单中的字段转换为movie对象。
在这里插入图片描述  在测试编辑函数时还碰到一个问题(折腾了两天才发现原因),函数声明中使用Bind限定了Movie类中的哪些属性可以编辑,其中也包括Id,Id在表单中(如上图所示)被设置为隐藏,其值设置为待编辑数据的Id,按理说表单提交时应该可以把Id值赋予movie对象并传递给编辑函数,但是在测试过程中发现编辑函数接收的movie对象中Id始终为0,程序也没有报错,折腾了很久也没有找到原因。后来发现是函数声明中Bind中指定的Id属性名称写错了,由Id变成了ID(微软的示例程序中是ID,我测试过程中修改成了Id,但是测试程序时没有改过来),将Bind中的属性名称修改为与Movie类属性名称相同后,问题解决。这里很容易出错,也不容易找出问题。
  程序的编辑操作截图如下所示,点击Save按钮,更新数据后返回主页面,此时数据已被修改。

在这里插入图片描述在这里插入图片描述  本文实现了基于ASP.NET Core MVC的数据新增、删除、编辑功能,后续还会继续根据微软的教程及示例项目学习ASP.NET Core MVC开发基本知识。

参考文献:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/controller-methods-views?view=aspnetcore-5.0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值