ASP.NET MVC5 入门七——完善视图

本节中,我们来修改上一篇博文里面系统自动生成的一些代码,下图是运行后的截图:

image

可以看到有很多不足比如:英文太多,日期格式太长等。

我们回到 Models\Movie.cs 添加几句代码:

image

红色框起来的就是增加的部分,using 语句里面的那个 DataAnnotations 我们下载在说。Display 属性指定要显示的字段的名称。原来没有写的话,就是数据库字段的名称,现在我们写上中文了。DataType 指定字段显示的格式,改为日期这样的话时间就不会显示出来,更美观了。

image

在上图左下角,能看到编辑的链接。这个链接是由 index.cshtml 里面的 Html.ActionLink 方法生成的:

image

Html是个Help 类,调用 ActionLink方法来动态生成HTML超链接。ActionLink方法第一个参数指定显示的字符串,第二个参数是 要调用的Action的名称,第三个参数是一个匿名对象。

按照前几篇讲的 /Movies/Edit/3 和 /Movies/Edit?id=3 是等价的。这2个url都是传递给Movies的Edit方法来去执行,同时给出ID。我们去看看这个方法:

image

第一个方法是接受GET请求,第二个是接受HttpPost 。可以看到第二个有个属性【HttpPost】而第一个没有,因为默认就是GET请求。我们注意到第二个Edit方法前面还有一个【ValidateAntiForgeryToken】这个主要是用来防止跨站请求伪造(CSRF)。这个需要和视图里面@Html.AntiForgerToken() 配合使用,会生成一个隐藏的防伪标记。下次写个文章介绍一下。

在上面的GET的Edit 方法,调用实体框架的FIND方法查找时候存在对应id的电影,如果存在就返回给视图,不存在就返回404。下面是视图里面的代码:

image

image

第一行代码,绑定了一个强类型对象。然后接下来利用这个对象,生成 <label> <input>等代码。Html.LabelFor 这个帮助类的方法显示对应的标题,Html.EditorFor 用来生成<input>标签,Html.ValidationMessageFor 就是用来进行验证的。

image

image

生成这么优美的控件,居然一句代码都不用写,真好!

image

这是表单的源文件,可以看到有个隐藏域,存放着上文的那个 RequestVerificationToken 等信息。从这句话可以看出<form action=”/Movies/Edit/2″ method=”post”>当我们点击save后,表单的所有数据都将用post请求发送到 /movies/edit/2 这个url。

回过头来看POST请求的EDIT方法:

image

第一步,判断表单中的模型所有属性时候都可以修改或者更新。如果是有效的,就把实体框架状态改为修改,然后更新到数据库。保存之后,重定向到Index 这个方法,我们就会看到修改后的效果。

在下一个教程:我们来实现搜索功能。

发表评论

邮箱地址不会被公开。