Grid.MVC - MVC 5支持POST请求吗?

时间:2014-09-10 21:49:21

标签: asp.net-mvc asp.net-mvc-5 http-post

我在使用Grid.MVC工具专门调用POST属性时遇到问题。 我在Grid.MVC工具中设置了一个列,设置属性RenderValueAs如下:

@Html.Grid(Model).Columns(columns =>
{
    // other lines...
    columns.Add().Encoded(false)
        .Sanitized(false)
        .RenderValueAs(item => Html.ActionLink("Delete", "Delete", new { item.ID }));
}).WithPaging(3).Sortable(true)

在我的控制器中,我设置了以下代码,该代码引用了删除操作:

[HttpPost]
public ActionResult Delete(int id)
{
    // anything here
    return RedirectToAction("Index");
}

最佳实践告诉您,action方法应仅支持POST请求,因为删除对象不是幂等操作。这是因为浏览器和缓存可以在未经用户明确同意的情况下自由发出GET请求,因此我必须小心避免因GET请求而进行更改。

但是,当我尝试应用此配置时,我有下一个错误:

应用程序中的服务器错误'/' 找不到资源。 说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,并确保拼写正确

但是如果我删除了[HttpPost]属性,代码就可以了。这种行为是否正确?

由于


更新:

巴渝,你有理由,现在我从另一个场景解释问题:我的观点如下:

<table>
    <tr>
        <th>ID</th>
        @*another columns*@
        <th>Name</th>
        <th>Actions</th>
    </tr>
    @foreach (var item in Model)
    {
    <tr>
        <td>@item.ID</td>
        @*another columns*@
        <td>@item.Name</td>
        <td>
            @using (Html.BeginForm("Delete", "Admin"))
            {
                @Html.Hidden("ID", item.ID)
                <input type="submit"
                        value="Delete row" />
            }
        </td>
    </tr>
    }
</table>

也就是说,我使用了HTML表,因此我可以使用输入来构建一个按钮,允许我从表中删除一行。 现在,我想使用Grid.View工具(因为除了其他好处之外我可以毫不费力地过滤列),但我不能为此目的使用输入。 你知道怎么做?

1 个答案:

答案 0 :(得分:1)

将新{item.ID}更改为新{id = item.ID})