ASP MVC - 许多请求在一个Ajax.BeginForm点击

时间:2017-06-04 19:38:42

标签: javascript asp.net ajax asp.net-mvc

我对请求有疑问 - 他们的数量。 我正在使用Ajax.BeginFormonSuccess选项。 但是,当我单击该表单时,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();
    }

1 个答案:

答案 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" })

干杯!!