2010-06-24 84 views
0

我有一個基本的ASP.NET MVC 2應用程序。我有添加和編輯行工作得很好,但刪除將無法正常工作。 Delete視圖在GET上獲得正確的記錄,但在回發時,傳遞的參數爲空,如CategoryID = 0中的所有空值。因此,沒有發現從數據庫中刪除對象並拋出異常。我怎樣才能得到正確的類別傳遞給HttpPost刪除操作?爲什麼傳遞給Delete操作的對象爲空?

下面是我在控制器中已經有了:

public ActionResult Delete(int id) 
    { 
     return View(_categoryRespository.Get(id)); 
    } 

    [HttpPost] 
    public ActionResult Delete(Category categoryToDelete) 
    { 
     try 
     { 
      _categoryRespository.Delete(categoryToDelete); 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

這是刪除視圖,正如我所說的正確地顯示在獲取數據:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MVCApp.Models.Category>" %> 

<h2>Delete</h2> 

<h3>Are you sure you want to delete this?</h3> 
<fieldset> 
    <legend>Fields</legend> 

    <div class="display-label">CategoryID</div> 
    <div class="display-field"><%: Model.CategoryID %></div> 

    <div class="display-label">SectionName</div> 
    <div class="display-field"><%: Model.SectionName %></div> 

    <div class="display-label">CategoryName</div> 
    <div class="display-field"><%: Model.CategoryName %></div> 

    <div class="display-label">Content</div> 
    <div class="display-field"><%: Model.Content %></div> 

</fieldset> 
<% using (Html.BeginForm()) { %> 
    <p> 
     <input type="submit" value="Delete" /> | 
     <%: Html.ActionLink("Back to List", "Index") %> 
    </p> 
<% } %> 

回答

0

你的表格實際上並不是POST。您可以使用CategoryID添加隱藏輸入,然後在您的存儲庫中創建一個靜態的Delete方法,該方法將接受CategoryID作爲參數(或者通過CategoryID實例化一個類別,然後調用您現有的Delete方法)。

控制器

public ActionResult Delete(int id) 
{ 
    return View(_categoryRespository.Get(id)); 
} 

[HttpPost] 
public ActionResult Delete(int categoryID) 
{ 
    try 
    { 
     _categoryRespository.Delete(categoryID); 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

查看

<h2>Delete</h2> 

<h3>Are you sure you want to delete this?</h3> 
<fieldset> 
    <legend>Fields</legend> 

    <div class="display-label">CategoryID</div> 
    <div class="display-field"><%: Model.CategoryID %></div> 

    <div class="display-label">SectionName</div> 
    <div class="display-field"><%: Model.SectionName %></div> 

    <div class="display-label">CategoryName</div> 
    <div class="display-field"><%: Model.CategoryName %></div> 

    <div class="display-label">Content</div> 
    <div class="display-field"><%: Model.Content %></div> 

</fieldset> 
<% using (Html.BeginForm()) { %> 
    <p> 
     <input type="hidden" name="categoryID" value="<%: Model.CategoryID %>" /> 
     <input type="submit" value="Delete" /> | 
     <%: Html.ActionLink("Back to List", "Index") %> 
    </p> 
<% } %> 
+0

感謝紅。該解決方案並不完全正確,但它讓我走上了正確的軌道。我無法將HttpPost Delete方法更改爲僅取int,因爲其他Delete方法已具有該簽名。所以我改變它爲一個int和一個字符串,併爲categoryID和categoryName添加隱藏字段。像冠軍一樣工作:) – witters 2010-06-24 14:08:56

+0

重複簽名很好,沒有注意到。 – RedFilter 2010-06-24 17:09:01

相關問題