“提交”按钮正在提交页面中的第一个表单

时间:2015-07-13 14:07:17

标签: asp.net-mvc forms razor form-submit submit-button

我正在尝试创建一个带有表格的MVC 5 Razor网页,此表格中的每一行都包含一个删除按钮,该按钮是一个后期操作:

<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>

在控制器中:

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

现在我的问题是当在表格的任何一行按下删除按钮时,它总是在页面中提交第一个表格,这意味着无论我按下什么提交按钮,表格中的第一个人总是被删除。 有什么想法可以解决这个问题吗?

修改 生成的页面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>ismail@example.com</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>MoHaKa@example.com</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>

2 个答案:

答案 0 :(得分:0)

使用此代替您的表单代码:

package\s+(?:\w+\s+?)?([^\s]+)\s+is(.*?)end\s+(package|\1)\s*;

ASP.NET MVC默认操作行为:首先在查询字符串中查找基本类型。

答案 1 :(得分:0)

也许最好只使用一个表单并添加这样的单元格而不是几种形式:

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