博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC系列:控制器的Edit方法
阅读量:4623 次
发布时间:2019-06-09

本文共 1500 字,大约阅读时间需要 5 分钟。

  在前面我们已经介绍了如何创建控制器、视图和数据模型,运行之前的项目并打开Movies主页,将鼠标悬停在“编辑”菜单上,你会看到浏览器右下角显示了“编辑”链接的地址

  首先我们查看视图代码,找到“编辑”项对应的代码

  通过代码提示我们知道方法返回包含指定操作的虚拟路径的定位点元素(a 元素);HTML辅助方法简化了视图的编码,所有模型值在渲染前都会被这些辅助方法对值进行HTML编码;在浏览器中我们可以查看辅助方法生成对应的HTML代码

 

  回到之前在浏览器右下角看到的地址,它是通过RouteConfig类(你可以在解决方案中的App_Start文件夹下找到它)生成的;ASP.NET将URL请求地址转换成对应的调用方法

public class RouteConfig    {        public static void RegisterRoutes(RouteCollection routes)        {            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");            routes.MapRoute(                name: "Default",                url: "{controller}/{action}/{id}",                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }            );        }    }

  向下图中,你可以直接在浏览器中提交http://localhost:51894/movies/Edit?Id=2,然后页面会转到编辑页面

  现在让我们来看看控制器中的Edit方法都做了些什么操作

  在代码中我们看到了两个Edit方法,其中一个标记了[HttpPost]属性,而其中一个没有,其实系统已经默认为它提供了  [HttpGet]属性,从生成的代码注释中我们也能看得出来;在一般的Web程序来说,Get请求用于读取数据,而Post用于写入数据;Post请求通常会改变服务器上的状态,重复提交Post请求可能会产生重复数据,而Get请求不会改变服务器状态,所以重复向服务器发送Get请求并不会造成什么影响;关于更多的get和post可以参看这篇文章

  从Get请求的Edit方法中,我们看到它通过传递过来的参数(id)从数据库上下文查找对应的数据,如果有数据就将该数据返回给视图,在创建视图的时候通过 @model MvcMovie.Models.Movie 声明了该视图指定的类型,并生成该类型的视图模板;如果没有查询到数据的话,它就直接通过HttpNotFound方法返回了一个对象

  对于Post请求的Edit方法来说,它接收了一个对象参数(用户更新的数据),然后然后对数据进行验证是否可以更新到数据库中,最后通过数据上下文的SaveChanges方法更新数据库中的数据

db.Entry(movie).State = EntityState.Modified;

  如果数据通过了验证,那么通过这行代码可以告知数据上下文该对象在数据库中已存在,所以不需要新建一条数据,而是更新旧的数据

  

  

 

转载于:https://www.cnblogs.com/liunlls/p/aspnet_mvc_edit_methods_view.html

你可能感兴趣的文章
#openstack故障处理汇总
查看>>
搜索旋转排序数组 II
查看>>
20、docker swarm
查看>>
psp工具软件前景与范围文档
查看>>
day06-三元表达式
查看>>
C# DateTime.Now详细用法
查看>>
Php中"{}"大括号的用法总结(转)
查看>>
JavaScript内存优化
查看>>
BZOJ1059: [ZJOI2007]矩阵游戏(二分图匹配)
查看>>
P3385 【模板】负环
查看>>
URI、URL 和 URN的区别
查看>>
根据表达式序列(前缀、中缀、后缀)构建表达式树
查看>>
mysql性能优化
查看>>
【SqlServer系列】语法定义符号解析
查看>>
Color Length UVA - 1625
查看>>
TLS/SSL
查看>>
zoj2319Beautiful People Dp
查看>>
图片加载 背景色块问题
查看>>
Static Binding (Early Binding) vs Dynamic Binding (Late Binding)
查看>>
搭建git服务器
查看>>