我想使删除链接是安全的内容。即。
第1行
编辑删除
第2行
编辑删除
删除链接是POST链接。
要使delete链接发布请求而不是get请求,我可以使用简单的表单POST与AntiForgeryToken和AntiForgeryToken验证结合使用
using(Html.BeginForm("Delete","Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.Hidden("objectId", i)
<input type="submit" value="Delete" />
}c#
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int objectId)
{
SafeLogic();
return View(...);
}我也想用表来做这件事,但是我对产生这么多的令牌有一些性能上的顾虑,例如。
@for (int i = 0; i < 500; i++)
{
<tr>
<td> Data Row @i </td>
<td>
using(Html.BeginForm("Index","Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.Hidden("objectId", i)
<input type="image" src="img_delete.gif" alt="Delete" />
}
</td>
}AntiForgeryTokens的产生成本有多高?是许多AntiForgery令牌的产生。最多100,会是个问题。有这么多内联html表单是可以的吗?
发布于 2014-07-13 05:33:31
我有个私人项目需要你这样做。
我没有为每个可以被删除的项目设置一个表单,而是有一个带有单个防伪令牌的表单。
@using(Html.BeginForm())
{
@Html.AntiForgeryToken()
{your HTML/Razor}
}delete图标基本上是一个ajax调用,它将激活控制器操作.
public JsonResult Delete(int id)
{
//delete the item
if(success)
{
return Json(true, JsonRequestBehavior.DenyGet);
}
else
{
return Json(false, JsonRequestBehavior.DenyGet);
}
}...and该操作将返回真或假(成功或失败)。根据这些信息,我将使用jQuery从表中删除项(在我的示例中,是格式化的表列表)。这样我就不会刷新整页了。
可能对你的实施不起作用,但为我解决了问题。
我不一定知道哪一个是最佳实践,多个表单还是一个有多个提交按钮的单一表单。有人说,如果这些表单的结束操作指向相同的操作,则不应该执行多个表单。更多信息:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=html+best+practices+multiple+forms
这可能取决于您希望您的html (使调试更容易)有多漂亮或可读性,例如,如果您有一个带有几个块的页面,它可能不会那么混乱。但是,想一想,一旦您有了五个或六个这样的块,您的页面将是怎样的。
发布于 2014-07-12 21:15:14
我将令牌移到循环之外,以避免任何赋值操作。我仍然不确定许多内联表单是一个很好的解决方案,甚至比附加脚本或onclick事件更好。只是试试看。
@{var token = @Html.AntiForgeryToken();}
@for (int i = 0; i < 5; i++)
{
using(Html.BeginForm("Index","Home", FormMethod.Post))
{
@Html.Hidden("text", "Element:" + i)
@token
<input type="Submit"/>
}
}https://stackoverflow.com/questions/24716427
复制相似问题