我在使用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工具(因为除了其他好处之外我可以毫不费力地过滤列),但我不能为此目的使用输入。 你知道怎么做?
答案 0 :(得分:1)
将新{item.ID}更改为新{id = item.ID})