我们再新建一个表,名字命名为"Contact",打开"AndroidDB.edmx"文件,右键选择"从数据库更新模型"。这个前边已经介绍过,这里就不多说,这样在实体层就创建了"Contact"类及它的属性。接下来,我们新添加一个名为"ContactController"的控制器类,用来显示我们的留言表单并实现留言功能。我们先看看Controller中的代码,如下:
代码如下 | 复制代码 |
public class ContactController : Controller public ActionResult Create() // |
上边这些代码就是 Controller 中所需的所有代码了,非常简洁,是吧?需要说明的2点是:1.[HttpPostAttribute]表明了只有当表单提交方式为"Post"时,才执行第二个方法,其他情况下执行第一个Create()方法。2.我们使用类 ObjectContext 的方法AddObject()方法进行添加操作,参数分别是属性名和实体,AddToContact()这种方法现在已经弃用了,这点我们需要注意下。关于使用ObjectSet属性可以参考下ASP.NET MVC3 实例(三) 使用 Controller 进行数据的的查询。
接下来我们添加 View 模板,用来展示留言表单,在Create()方法上右键单击,Add View,如下图:
我们分别选择了 View data class 为"Contact",模板为"Create",得到如下的 View:
代码如下 | 复制代码 |
@model Android.Models.Contact @using (Html.BeginForm()) { @Html.ValidationSummary(true) } |
这种写法在 ASP.NET MVC 2 里就已经有了,并没有太多可说的,它使用强类型的 HtmlHelper 方法输出相应的 HTML 的标记。看留言内容那里,可知我们可以定义输入框的大小和ID(Name),非常方便。到这里,我们就已经完成了 ASP.NET MVC 3 中的添加操作。当用户点击"Create"按钮时,表单中的数据会自动正确的赋给对应的属性。
我们要时刻记得“用户的输入是邪恶的”,这样我们要对用户的输入进行必要的验证。实体层数据验证的改进也是 MVC 3 中的一大亮点。@Html.ValidationSummary(true)表明我们已经启用了客户端的异步验证,很明显这样可以减少不必要的服务器请求,MVC3中微软全面使用 jQuery 进行客户端的验证。
ASP.NET MVC3中实体数据的验证是非常简单的,业务逻辑分离的非常好,如在验证留言内容时,只需添加如下代码:
代码如下 | 复制代码 |
[Required(ErrorMessage="不能为空")] [StringLength(1000, ErrorMessage = "长度在5-1000", MinimumLength = 5)] public global::System.String Content { get { return _Content; } set { OnContentChanging(value); ReportPropertyChanging("Content"); _Content = StructuralObject.SetValidValue(value, true); ReportPropertyChanged("Content"); OnContentChanged(); } } |
分别验证了必填和长度两个属性,还有很多属性,我们就不做一一介绍了。最后看下结果,如下:
下边就让我们在此基础上来完成 ASP.NET MVC3 中的修改和删除操作。
首先,我们在 Contact 控制器类中添加一个名为 View()的方法,用来从 Contact 表中取出留言数据,并传递给列表页 "Index",方法如下:
代码如下 | 复制代码 |
// // GET: /Contact/ public ActionResult Index() { var contact = from c in android.Contact where c.IsValid == 1 orderby c.ID descending select c; return View(contact.ToList()); } |
我们使用 Linq 从 Contact 表中取出了所有有效数据(IsValid==1),并按ID降序显示。接下来,添加名为"Index"的视图,最终 "Index" 全部代码如下:
代码如下 | 复制代码 | |||||||
@model IList
|
可以看到,显示用的代码是非常整洁的,我们没有做样式方面的美化,最终的列表页效果如下:
修改操作、删除操作传递的参数都是留言ID,首先,我们看看修改操作,分别给 "Contact" Controller 添加名为 Edit() 两个方法,1.用来根据根据ID得到留言实体,并返回给编辑页;2.完成修改操作。如下:
代码如下 | 复制代码 |
// // |
为了简洁起见,修改时我们只修改留言是否有效,其他的和这个类似,"Edit"视图最终代码如下:
代码如下 | 复制代码 |
@model Android.Models.Contact }
|
页面的效果如下图所示:
其中RadioButtonFor同LabelFor使用方法类似,这样当我们点击列表页中的"编辑"时,先执行第一个"Edit"方法,根据ID将实体返回到我们的编辑页。当我们点击"Save"提交时,执行第二个"Edit"方法,并对数据库中的"Contact"表进行了修改操作,这样实现了在 ASP.NET MVC3 中的修改操作。
下边看看删除操作,"Contact" 控制器类中的删除方法只使用 Get 方式的就行,因为我们将根据传递过来的ID直接进行删除操作,如下:
代码如下 | 复制代码 |
// // GET: /Contact/Delete/5 public ActionResult Delete(int id) { try { var contact = android.Contact.Single(c => c.ID == id); android.DeleteObject(contact); android.SaveChanges(); } catch { } return RedirectToAction("../Contact"); } |
当然了此时的"Delete" 视图完全为空也是可以的。删除操作执行后返回到我们的留言列表中,到这里删除操作就完成了。这里使用真删除是为了说明DeleteObject()方法,一般这种情况我们只需将"IsValid"字段修改为0即可,并不做真删除。还有一点要注意的是,例子中使用try进行异常的处理,因为 Linq 查询时会在有问题时抛出相应的异常、SaveChanges()也会抛出异常。
从这两篇文章我们不难发现,在 ASP.NET MVC3中我们不再需要手动写代码来接收参数了,你可以在添加、修改操作中看到我们并没有手动写代码来接收以"Post"方式提交过来的表单数据。如果你看的 MVC 3中的有些文章还在使用Request["parameter"]、Request.Form["parameter"]、Request.QueryString["parameter"]、collection["parameter"](collection 是 FormCollection 类对象)的方式接收参数,你就需要注意下了。当然,ASP.NET MVC3中还有非常多的特征,本系列还将会进行介绍。