HTML5技术

ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图 - .NETCore中国学习(3)

字号+ 作者:H5之家 来源:博客园 2016-06-19 13:00 我要评论( )

HTMLform中的input元素的action属性用于设置请求发送到/Movies/Edit/idURL。当点击 Save按钮时表单数据会被发送到服务器。在/form元素关闭前最后一行/form展示了XSRF生成的隐藏域标识。 处理 POST 请求 下面的列表

HTML<form>中的<input>元素的action属性用于设置请求发送到/Movies/Edit/idURL。当点击 Save按钮时表单数据会被发送到服务器。在</form>元素关闭前最后一行</form>展示了XSRF生成的隐藏域标识。

处理 POST 请求

下面的列表显示了[HttpPost]不同版本的Edit方法。

[HttpPost] //手动高亮 [ValidateAntiForgeryToken] //手动高亮 public async Task<IActionResult> Edit(int id, [Bind("ID,Genre,Price,ReleaseDate,Title")] Movie movie) { if (id != movie.ID) { return NotFound(); } if (ModelState.IsValid) //手动高亮 { try { _context.Update(movie); //手动高亮 await _context.SaveChangesAsync(); //手动高亮 } catch (DbUpdateConcurrencyException) { if (!MovieExists(movie.ID)) { return NotFound(); } else { throw; } } return RedirectToAction("Index"); //手动高亮 } return View(movie); }

[ValidateAntiForgeryToken]特性验证Form Tag Helper生成的存放在隐藏域中的XSRF反伪造标记。

模型绑定机制以发送表单数据创建Movie对象并作为movie参数。ModelState.IsValid方法验证表单提交的数据可以用来修改(编辑或更新)一个Movie对象。如果数据有效,就可以保存。更新(编辑) movie 数据会被存到数据库通过 database context 的SaveChangesAsync方法。数据保存完毕以后,这段代码将用户重定向到MoviesController类的Index方法,这个页面显示了改动后最新的Movie集合。

表单数据被发布到服务器之前,客户端校验会检查所有字段上的验证规则。如果有任何验证错误,则显示错误消息,并且表单数据不会被发送。如果禁用了 JavaScript,将不会有客户端验证,但服务器端将检测出发送数据是无效的,表单依旧会显示出错误信息。在稍后的教程中,我们会探讨Model Validation 模型验证更多关于验证的细节。Views/Book/Edit.cshtml视图模版中的Validation Tag Helper 负责显示错误信息。

Model Validation 模型验证

movie controller 的所有HttpGet方法都遵循类似的模式。它们获取一个对象(或者对象列表,比如 Index),把对象(模型)传递到视图。Create方法创建一个空的对象到Create视图。诸如 Create、Edit、Delete 等之类的会修改数据的方法都会在[HttpPost]版本的重载方法中这样做(译者注:执行类似于前文所述的这些操作)。在 HTTP GET 方法中修改数据有安全风险,参考ASP.NET MVC 提示 #46 – 不要使用删除链接,因为他们制造安全漏洞。在HTTPGET方法中修改数据同样也违反 HTTP 最佳实践以及REST架构模式,其中规定 GET 请求不应该更改应用程序的状态。换句话说,执行 GET 操作应该是没有任何副作用,不会修改您的持久化的数据。

附录资源

返回目录

posted @

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Dora.Interception: 一个为.NET Core度身定制的AOP框架 - Artech

    Dora.Interception: 一个为.NET Core度身定制的AOP框架 - Artech

    2017-05-02 11:00

  • 如何在 ASP.NET Core 中发送邮件 - Savorboard

    如何在 ASP.NET Core 中发送邮件 - Savorboard

    2017-05-02 08:02

  • 十二个 ASP.NET Core 例子 - Savorboard

    十二个 ASP.NET Core 例子 - Savorboard

    2017-04-27 16:01

  • ASP.NET MVC5请求管道和生命周期 - 雪飞鸿

    ASP.NET MVC5请求管道和生命周期 - 雪飞鸿

    2017-04-24 08:04

网友点评
=