IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> VSCode创建ASP.NET Core MVC项目(2:实现新增、删除、修改功能) -> 正文阅读

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

作者:recommend-item-box type_blog clearfix

??接着上一篇文章,继续实现基于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

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:36:27  更:2021-07-16 11:37:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 16:38:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码