2015-07-13 123 views
1

我試圖讓一個MVC 5剃刀網頁與在它的表,在這個表中的每一行都包含一個刪除按鈕,這是後採取行動:提交按鈕提交第一個表單頁面

<table> 
    <thead> 
     <tr> 
      <th>Name</th> 
      . 
      . 
      . 
      <th>Actions</th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach(var item in Model) 
     { 
      <tr> 
       <td>@item.Name</td> 
       . 
       . 
       . 
       <td> 
        @using(Html.BeginForm("Delete", "Person", FormMethod.Post)) 
        { 
         @html.AntiForgetyToken() 
         @html.Hidden("personId", item.PersonId) 

         <button type="submit" class="btn">Delete</button> 
        } 
       </td> 
      </tr> 
     } 
    </tbody> 
</table> 

和Controller:

public class PersonController : BaseController 
{ 
    [HttpPost, ValidateAntiForgeryToken] 
    public ActionResult Delete(int personId) 
    { 
     // Do Something... 
    } 
} 

現在我的問題是總是被刪除,不管它總是提交的,這意味着在表中的第一人的頁面的第一種形式的表格的任意一行按下Delete按鈕時我按什麼提交按鈕。 任何想法來解決這個問題?

編輯: 生成的HTML頁面

<div class="page-header"> 
    <h2>Person List</h2> 
</div> 

<table class="row table table-striped"> 
    <thead> 
     <tr class="text-primary"> 
      <th class="text-center">#</th> 
      <th>Name</th> 
      <th>Email</th> 
      <th>Status</th> 
      <th>Action</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td class="text-center">5</td> 
      <td>Ismail</td> 
      <td>[email protected]</td> 
      <td>Active</td> 
      <td> 
       <form action="/WebApp/Person/Delete?PersonID=5" method="post"> 
        <input name="__RequestVerificationToken" type="hidden" value="Uxhp0Bq1ATAwOXNODHmc74f12O2-dvFhQ5kletbmDkq64CEPWZlXXPKuHDoqSy4DXF6mJhYfGffc_YAn1yERxp69JCUT9IlGTKdfirvVvqE1" /> 
        <div class="text-center"> 
         <div class="btn-group btn-group-xs"> 
          <a class="btn btn-default" href="/WebApp/Person/Details?PersonID=5">View</a> 
          <a class="btn btn-default" href="/WebApp/Person/Edit?PersonID=5">Edit</a> 
          <button class="btn btn-danger>Delete</button> 
         </div> 
        </div> 
       </form>      
      </td> 
     </tr> 
     <tr> 
      <td class="text-center">6</td> 
      <td>MoHaKa</td> 
      <td>[email protected]</td> 
      <td>Active</td> 
      <td> 
       <form action="/WebApp/Person/Delete?PersonID=6" method="post"> 
        <input name="__RequestVerificationToken" type="hidden" value="R4CUAuVpbGihZvrFxxCjCL_oJ7tgkS_Xxh67i_xCpMXpvZKR5ASUWrSCvjg52yRorF-Ypeau1oZwDi96caHyUj-gmBeHnx7NBgfJBLkLPnQ1" /> 
        <div class="text-center"> 
         <div class="btn-group btn-group-xs"> 
          <a class="btn btn-default" href="/WebApp/Person/Details?PersonID=6">View</a> 
          <a class="btn btn-default" href="/WebApp/Person/Edit?PersonID=6">Edit</a> 
          <button class="btn btn-danger>Delete</button> 
         </div> 
        </div> 
       </form>      
      </td> 
     </tr> 

    </tbody> 
</table> 
+0

我的眼睛可以欺騙我,但我沒有看到'hidden'輸入爲' personId'應該是生成頁面中POST負載的一部分。 – EdSF

+0

是的,但@AlexPolyankin要求我去掉隱藏的輸入並使用routeValues,它的結果是一樣的 – MoHaKa

+0

您的'controller'限制爲'HttpPost'(不是'GET') - 調試您的控制器並檢查什麼值你得到'personId'參數)。 – EdSF

回答

0

使用此,而不是你的表單代碼:

@using(Html.BeginForm("Delete", "Person", new { item.PersonId })) 
{ 
    @Html.AntiForgetyToken() 
    <button class="btn">Delete</button> 
} 

ASP.NET MVC默認操作行爲:原始類型首先查詢看串。

+0

你確定它會產生正確的路線嗎?它不應該是'new {personId = item.PersonId}'嗎? –

+0

@tevankot是的,這是捷徑。更多信息[在這裏](http://csharp.2000things.com/tag/anonymous-types/)。 – ranquild

+0

我沒有試過,它既不工作也不工作,表中第一個人的Id是在personId參數 – MoHaKa

0

也許是更好的使用只是一種形式,並添加單元格這樣的,而不是幾種形式:

<td onclick="window.location='@Url.Action("Delete", new { PersonID = item.PersonId })'" style="cursor:pointer;"> 
</td>