HTML5技术

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

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

ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图 原文:Controller methods and views 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘)、张仁建(第二年.夏)、许登洋(Seay)、姚阿勇(Dr.Yao)、娄宇(Lyrics) 我们已经初步的创建了

ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图

原文:Controller methods and views
作者:Rick Anderson
翻译:谢炀(Kiler)
校对:孟帅洋(书缘)、张仁建(第二年.夏)、许登洋(Seay)、姚阿勇(Dr.Yao)、娄宇(Lyrics)

我们已经初步的创建了一个 movie 应用程序,但是展示并不理想。我们不希望看到 release date 字段显示时间并且ReleaseDate应该是两个单词。

movies-Index

打开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。

    Quick Actions

  • 点击usingSystem.ComponentModel.DataAnnotations;

    using System.ComponentModel.DataAnnotations;

  • Visual studio 会自动添加usingSystem.ComponentModel.DataAnnotations;引用代码。

    让我们移除多余的using引用代码。它们默认以灰色字体出现。右键点击Movie.cs文件 点击> Organize Usings > Remove Unnecessary 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。

    Movies-Edit

    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工具如下图。

    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方法:

    两个Edit 方法

    // GET: Movies/Edit/5 public async Task<IActionResult> Edit(int? id) { if (id == null) { return NotFound(); } var movie = await _context.Movie.SingleOrDefaultAsync(m => m.ID == id); if (movie == null) { return NotFound(); } return View(movie); } // POST: Movies/Edit/5 // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see ?LinkId=317598. [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); }

    [Bind]特性是防止(过度提交,客户端可能发送比期望还多的数据,比如只需要2个属性但是发送了3个属性)的一种方法。你应该只把需要改变的属性包含到[Bind]特性中。请参阅获取更多信息,ViewModels提供了另一种防止 over-posting 的方法。

     

    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

    网友点评
    s