2011-09-05 107 views
1

在我的yahoo電子郵件中,收件箱顯示爲電子郵件項目列表。點擊該項目將顯示其詳細信息。現在,回到收件箱。列表中的一列是複選框。如果我點擊一個或多個複選框,然後點擊「刪除」,那麼所有這些項目都將被刪除。ASP.NET MVC - 刪除表中的行,然後更新數據庫

這或多或少是我想用ASP.NET MVC應用程序實現的。我有一個表中有一些行,我可以勾選一些複選框刪除選定的行並更新數據庫。

我來自Web窗體背景。如果點擊刪除按鈕,它會回發帖子,我可以在我的代碼中檢查需要刪除的項目。然而,我正在這樣做,在ASP.NET MVC中,我沒有回發或查看狀態的好處。我認爲這可以通過AJAX實現,但我想要一個更簡單的解決方案,就像一個簡單的表單文章。不幸的是,我不知道從哪裏開始。

在這一點上,我可以用JQuery刪除客戶端上的行,但我還沒有任何數據庫部分。任何提示高度讚賞。

下面是我的視圖代碼:

@model IEnumerable<Simplex.Data.Models.MessageBoardModel> 

@{ 
    ViewBag.Title = "Message Board"; 
} 

<script type="text/javascript"> 
    function deleteItems() { 
     $('.td_checkbox:checked').closest('tr').closest(tr).remove(); 
    } 

    $(document).ready(function() { 
     $('#btnDelete').click(function() { 
      deleteItems(); 
     }); 
    }); 
</script> 

<div id="content"> 
    <h2>Board List</h2> 
    @{ Html.RenderAction("search", "home"); } 
    <div class="board_list"> 
     <table> 
      <tr> 
       <th> 
        No 
       </th> 
       <th> 
        Subject 
       </th> 
       <th> 
        Posted By 
       </th>   
       <th> 
        Posting Date 
       </th> 
      </tr> 

    @foreach (var item in Model) { 
     <tr [email protected]> 
      <td> 
       @Html.DisplayFor(modelItem => item.Id) 
      </td> 
      <td class="subject"> 
       <a href="@Url.Action("details", new { id = item.Id })"><input class="td_checkbox" type="checkbox" />&nbsp;@item.Subject</a> 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Username) 
      </td>   
      <td> 
       @Html.DisplayFor(modelItem => item.DatePosted) 
      </td> 
     </tr> 
    } 
    </table> 
    <button id="btnDelete">Delete</button> 
    <a href="@Url.Action("create")"><input type="button" value="Post" /></a> 
</div> 

回答

1

第一個問題,不要使用@foreach,即剔除了內置收集處理。改爲使用@Html.DisplayForModel()。這將正確地創建適當的索引項目名稱和ID。

然後在您的HttpPost處理程序中,您將希望將參數設置爲集合,並且您可以遍歷列表並查看設置了哪些複選框。

0

使用for循環來呈現每個消息如下:

<input name="messages[@i.ToString()].Key" type="hidden" value="@item.Id" /> 
<input name="messages[@i.ToString()].Value" type="checkbox" value="true" /> 

然後捕捉你的行動張貼值這樣

[HttpPost] 
public ActionResult Delete(Dictionary<int,bool> messages) 
{ 
    IEnumerable<int> idsOfItemsYouWantToDelete = messages.Where(pair => pair.Value).Select(pair => pair.Key); 
// Do delete, return redirect or whatever 
} 

這工作,因爲Dictionary<int,bool>KeyValuePair<int,bool>個集合並且.Key.Value輸入字段將與的.Key.Value屬性匹配。您可能想要閱讀ASP.NET Wire Format for Model Binding to Arrays, Lists, Collections, Dictionaries

相關問題