MVC AntiforgeryToken - 限制?
MVC AntiforgeryToken - Limit?
我有一个视图在 firefox 上显示正常,但在 IE11 上显示不正常。
它使用数据表,其中 2 列有按钮来切换显示的某些数据的状态。
这些专栏非常相似,其中一个是这样的....
@{
<td style="width: 18%">
@if ((ViewBag.UserIsAdmin == "1") && ("AV".Contains(Model[ix].Status[0])) )
{
<span class="hidden_span">@Html.DisplayFor(modelItem => Model[ix].StockId)</span>
string voidItemButtonCaption = String.Format("{0} {1}", ((Model[ix].Status[0] == 'A') ? "Void Item" : "Un-Void Item"), Model[ix].StockId);
using (Html.BeginForm("VoidStockItem", "Stock", new { stockId = Model[ix].StockId, categoryId = Model[ix].CategoryId, bAvailableOnly = availableOnly }, FormMethod.Post, null))
{
@Html.AntiForgeryToken()
@Html.Raw(string.Format("<input type=\"submit\" value=\"{0}\" name=\"VoidStockItem\" class=\"btn btn-default smaller_btn_btn_default\" />", voidItemButtonCaption));
}
}
else
{
@Html.DisplayFor(modelItem => Model[ix].StockId)
}
</td>
}
我发现如果我的模型包含超过 115 个项目,那么在 IE 中将不会显示视图,它只会显示 "This page can’t be displayed"。
在 IE 中使用 F12 也没有太大帮助....
"DOM7011: The code on this page disabled back and forward caching. For more information, see: http://go.microsoft.com/fwlink/?LinkID=291337"
经过大量的摸索后,我发现如果删除防伪标记,页面将正确加载。显然我不能将此作为解决方案,但我想这至少是一个线索。
看来我在一个视图中限制了大约 230 个防伪标记。
有问题的视图列出了股票并允许用户作废特定项目,所以这没什么特别的。
所以我的问题是......
- 视图上的防伪标记数量是否有限制?
- 有没有办法只在点击其中一个提交按钮 ic 时插入一个?
- 我是不是做错了什么?
- 有人可以指出正确的方向来解决这个问题吗?
非常感谢任何帮助。
我最终通过 AJAX 做到了。
它从 _Layout 中拾取 AntiForgeryToken,效果很好。
//There isn't an antiforgerttoken on this page but there is one in the _~\shared\layout so it picks that up
params["__RequestVerificationToken"] = $('[name=__RequestVerificationToken]').val();
//Set the generic params
params["categoryId"] = catId;
params["denom"] = thisdenom;
params["bAvailableOnly"] = bAvail;
if (bIsBatch) {
url = "@Url.Action("VoidStockBatch", "Stock")";
params["stockBatchId"] = itemId;
} else {
url = "@Url.Action("VoidStockItem", "Stock")";
params["stockId"] = itemId;
}
$.ajax({
url: url,
type: 'POST',
cache: false,
data: params,
success: ...........
我有一个视图在 firefox 上显示正常,但在 IE11 上显示不正常。
它使用数据表,其中 2 列有按钮来切换显示的某些数据的状态。
这些专栏非常相似,其中一个是这样的....
@{
<td style="width: 18%">
@if ((ViewBag.UserIsAdmin == "1") && ("AV".Contains(Model[ix].Status[0])) )
{
<span class="hidden_span">@Html.DisplayFor(modelItem => Model[ix].StockId)</span>
string voidItemButtonCaption = String.Format("{0} {1}", ((Model[ix].Status[0] == 'A') ? "Void Item" : "Un-Void Item"), Model[ix].StockId);
using (Html.BeginForm("VoidStockItem", "Stock", new { stockId = Model[ix].StockId, categoryId = Model[ix].CategoryId, bAvailableOnly = availableOnly }, FormMethod.Post, null))
{
@Html.AntiForgeryToken()
@Html.Raw(string.Format("<input type=\"submit\" value=\"{0}\" name=\"VoidStockItem\" class=\"btn btn-default smaller_btn_btn_default\" />", voidItemButtonCaption));
}
}
else
{
@Html.DisplayFor(modelItem => Model[ix].StockId)
}
</td>
}
我发现如果我的模型包含超过 115 个项目,那么在 IE 中将不会显示视图,它只会显示 "This page can’t be displayed"。 在 IE 中使用 F12 也没有太大帮助.... "DOM7011: The code on this page disabled back and forward caching. For more information, see: http://go.microsoft.com/fwlink/?LinkID=291337"
经过大量的摸索后,我发现如果删除防伪标记,页面将正确加载。显然我不能将此作为解决方案,但我想这至少是一个线索。
看来我在一个视图中限制了大约 230 个防伪标记。 有问题的视图列出了股票并允许用户作废特定项目,所以这没什么特别的。
所以我的问题是......
- 视图上的防伪标记数量是否有限制?
- 有没有办法只在点击其中一个提交按钮 ic 时插入一个?
- 我是不是做错了什么?
- 有人可以指出正确的方向来解决这个问题吗?
非常感谢任何帮助。
我最终通过 AJAX 做到了。
它从 _Layout 中拾取 AntiForgeryToken,效果很好。
//There isn't an antiforgerttoken on this page but there is one in the _~\shared\layout so it picks that up
params["__RequestVerificationToken"] = $('[name=__RequestVerificationToken]').val();
//Set the generic params
params["categoryId"] = catId;
params["denom"] = thisdenom;
params["bAvailableOnly"] = bAvail;
if (bIsBatch) {
url = "@Url.Action("VoidStockBatch", "Stock")";
params["stockBatchId"] = itemId;
} else {
url = "@Url.Action("VoidStockItem", "Stock")";
params["stockId"] = itemId;
}
$.ajax({
url: url,
type: 'POST',
cache: false,
data: params,
success: ...........