西北狼

-- 学而时习之,不亦乐乎!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

MVC学习之实现HTTP-GET的Delete Action方法

Posted on 2009-05-14 13:23  西北老狼  阅读(1162)  评论(1编辑  收藏  举报
实现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记录已经不存在了。