ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图
原文:Controller methods and views
作者:Rick Anderson
翻译:谢炀(Kiler)
校对:孟帅洋(书缘)、张仁建(第二年.夏)、许登洋(Seay)、姚阿勇(Dr.Yao)、娄宇(Lyrics)
我们已经初步的创建了一个 movie 应用程序,但是展示并不理想。我们不希望看到 release date 字段显示时间并且ReleaseDate应该是两个单词。
打开Models/Movie.cs文件并添加下面高亮的代码行:
public class Movie { public int ID { get; set; } public string Title { get; set; } [Display(Name = "Release Date")] //手动高亮 [DataType(DataType.Date)] //手动高亮 public DateTime ReleaseDate { get; set; } public string Genre { get; set; } public decimal Price { get; set; } }右键点击红色波浪线代码行> Quick Actions。
点击usingSystem.ComponentModel.DataAnnotations;
Visual studio 会自动添加usingSystem.ComponentModel.DataAnnotations;引用代码。
让我们移除多余的using引用代码。它们默认以灰色字体出现。右键点击Movie.cs文件 点击> Organize Usings > Remove Unnecessary Usings菜单。
更新后的代码: using System; using System.ComponentModel.DataAnnotations; namespace MvcMovie.Models { public class Movie { public int ID { get; set; } public string Title { get; set; } [Display(Name = "Release Date")] [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } public decimal Price { get; set; } } }
我们会在下一篇文章中继续发掘DataAnnotations的内容。Display特性用来指定字段的显示名 (在本示例中 “Release Date” 会替代 “ReleaseDate”)。DataType特性指定数据类型,在本示例是日期类型,所以字段中存储的时间信息不会被显示。
浏览Movies控制器并把鼠标悬停于Edit链接上可以看到目标 URL。
Edit、Details以及Delete链接是由Views/Movies/Index.cshtml文件中的 MVC Core Anchor Tag Helper 自动生成的。
<td> <a asp-action="Edit" asp-route-id="@item.ID">Edit</a> | //手动高亮 <a asp-action="Details" asp-route-id="@item.ID">Details</a> | //手动高亮 <a asp-action="Delete" asp-route-id="@item.ID">Delete</a> //手动高亮 </td>Tag Helpers允许服务器端代码在 Razor 文件中创建和生成 HTML 元素。在上面的代码中,AnchorTagHelper通过 controller 方法以及路由ID 动态生成 HTMLhref属性值。你可以在你熟悉的浏览器中使用View Source菜单或者使用F12工具来检查你生成的 HTML 标签。F12工具如下图。
在Startup.cs文件中设置回调路由格式。
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); //手动高亮 });ASP.NET Core 会把:1234/Movies/Edit/4转化成发送到Moviescontroller 的Edit方法的请求并带上值为 4 的ID参数。(Controller 方法其实就是指代 action 方法。)
Tag Helpers是 ASP.NET Core 中最受欢迎的新功能之一。 参考获取更多信息。
打开Moviescontroller 并查看两个Edit方法:
[Bind]特性是防止(过度提交,客户端可能发送比期望还多的数据,比如只需要2个属性但是发送了3个属性)的一种方法。你应该只把需要改变的属性包含到[Bind]特性中。请参阅获取更多信息,ViewModels提供了另一种防止 over-posting 的方法。