我对请求有疑问 - 他们的数量。
我正在使用Ajax.BeginForm
和onSuccess
选项。
但是,当我单击该表单时,OnSuccess
选项的JS处理程序会多次触发。
我查找了我的请求,看起来像这样:
Image with number of request
所以我的问题是:为什么如果我点击AjaxForm它会提出很多请求? 感谢
使用Ajax操作链接查看:
@foreach (var item in Model)
{
if (item.Accepted == false)
{
<text>
<tr>
<td>
@Html.DisplayFor(modelItem => item.Accepted)
</td>
<td>
@Html.DisplayFor(modelItem => item.IsOrganizer)
</td>
<td>
@Html.DisplayFor(modelItem => item.PlayerRating)
</td>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Ajax.ActionLink("Akceptuj", // <-- Text to display
"AcceptPlayer", // <-- Action Method Name
new { id = item.PlayerId },
new AjaxOptions
{
HttpMethod = "POST",
})
</td>
</tr>
</text>
}
}
控制器操作:
[Authorize]
public ActionResult AcceptPlayer(long id)
{
using (var Players = new DbMigrationExample2Entities())
{
Player playerToAccept = Players.Player.Find(id);
if (playerToAccept == null)
{
return HttpNotFound();
}
playerToAccept.Accepted = true;
Players.SaveChanges(); return View();
}
答案 0 :(得分:0)
如果你在部分布局中曾两次包含 jquery.unobtrusive-ajax.min.js 两次。因此,您的浏览器会在两次内部执行js,这将在表单点击事件上订阅两次,这就是为什么要执行两次POST而不是一次。 所以你需要从部分中删除jquery.unobtrusive-ajax.min.js。
注意:如果您使用部分布局,则不需要复制部分中包含的js,因为布局已经完成了。有一些关于布局和部分的好文章。
其次认为如果问题仍然存在,那么此处的解决方案: First ajax request is sent multiple times
如果您的所有解决方案都无效,那么您肯定需要将 Ajax.ActionLink 更改为 Html.ActionLink ,例如:
@Html.ActionLink(article.Title, new { controller = "Akceptuj", action = "AcceptPlayer", id = item.PlayerId }, new AjaxOptions { HttpMethod = "POST" })
干杯!!