实现HTTP-GET的Delete Action方法
现在开始添加Delete功能到DinnersController类。当用户访问/Dinners/Delete/[id] URL网址时,将访问delete action 方法,下面是该方法的实现:
//
// HTTP GET: /Dinners/Delete/1
public ActionResult Delete(int id)
{
Dinner dinner = dinnerRepository.GetDinner(id);
if (dinner == null)
return View("NotFound");
else
return View(dinner);
}
action方法试图检索将要删除的Dinner对象。如果Dinner对象存在,就呈现该Dinner对象的视图。如果对象不存在(或者已经删除了),将返回一个NotFound的视图,之前我们已经创建了这个视图。
创建Delete视图的方法不重复了,如下图所示:
点击Add按钮后,Visual Studio 自动在\Views\Dinners 目录下创建一个新的Delete.aspx 视图模板文件。
我们将修改该文件,实现删除确认。代码如下:
<asp:Content ID="Title" ContentPlaceHolderID="TitleContent" runat="server">
删除确认:<%= Html.Encode(Model.Title) %>
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server">
<h2>
确认删除么?</h2>
<div>
<p>
请确认是否取消该宴会:<i>
<%= Html.Encode(Model.Title) %></i></p>
</div>
<% using (Html.BeginForm())
{ %>
<input name="confirmButton" type="submit" value="删除" />
<% } %>
</asp:Content>
上述代码显示将要删除的Dinner,并输出<form>元素,当用户点击删除Delete按钮时,就提交表单到/Dinners/Delete/[id] 地址。
运行应用程序,访问/Dinners/Delete/[id] 网址,id标识一个有效的Dinner对象,在浏览器中显示效果如下:
实现HTTP-POST Delete Action方法
现在实现Delete action方法的HTTP POST动作,代码如下:
//
// HTTP POST: /Dinners/Delete/2
[
AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(int id, string confirmButton)
{
Dinner dinner = dinnerRepository.GetDinner(id);
if (dinner == null)
return View("NotFound");
dinnerRepository.Delete(dinner);
dinnerRepository.Save();
return View("Deleted");
}
Delete Action方法的HTTP-POST版本首先检索需要删除的Dinner对象。如果没有找到(可能已经删除了),则显示NotFound视图模板。如果找到了,则从DinnerRepository 中删除,并展示Deleted视图模板。
现在需要创建Deleted视图模板,在Add View对话框中,不需要选择强类型的Model类型,如下图所示:
再次运行范例程序,访问/Dinners/Delete/[id] URL地址,在确认删除窗口中,点击删除Delete按钮,执行HTTP-POST操作到/Dinners/Delete/[id] 地址,触发DinnersController中的Delete方法的Post版本,从数据库中删除指定的Dinner记录,并显示已删除Deleted视图模板:
点击“显示即将来临的宴会列表”链接,返回/Dinners地址,发现刚才删除的Dinnerd记录已经不存在了。
来自西北的狼!