在ASP.net中自动注销Ajax调用

时间:2018-05-17 19:18:34

标签: asp.net asp.net-mvc-4

我在我的数据库中有一个包含不同足球俱乐部的下拉列表。当我选择一个时,将进行ajax调用以显示俱乐部将要玩的所有游戏。

问题在于,当我以AspNetUser身份登录时,我会在第二次提交注册表时自动注销。

当我没有登录时,一切正常。

我真的很困惑为什么会发生这种情况。

控制器

[Authorize]
public class WedstrijdController : Controller
{

    [AllowAnonymous]
    public ActionResult Index()
    {
        ploegService = new PloegService();
        ViewBag.PloegId = new SelectList(ploegService.All(),
            "Id", "Naam");
        return View();
    }

    [AllowAnonymous]
    public ActionResult IndexAjax(int? ploegId)
    {
        if (ploegId == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        wedstrijdService = new WedstrijdService();
        var wedstrijden = wedstrijdService.WedstrijdenByPloeg(Convert.ToInt16(ploegId));
        return PartialView("_SearchWedstrijdenPartial", wedstrijden);
     }
}

Index.cshtml

@{
    ViewBag.Title = "Lijst";
}


<h2>Wedstrijden</h2>

<div class="panel panel-default">
    <div class="panel-heading">Kies een wedstrijd</div>
    <div class="panel-body">
        @using (Ajax.BeginForm("IndexAjax", "Wedstrijd",
        new AjaxOptions
        {
            InsertionMode = InsertionMode.Replace,
            HttpMethod = "POST",
            LoadingElementId = "ajax-loader",
            UpdateTargetId = "searchresults",
        }))
        {
        <div class="form-horizontal">
            <div class="form-group">
                @Html.Label("Ploeg", htmlAttributes: new { @class = "control-label col-md-1" })
                <div class="col-md-10">
                    @Html.DropDownList("PloegId", null, "---Kies ploeg---", htmlAttributes: new { @class = "form-control" })
                    <img id="ajax-loader"
                         src="@Url.Content("~/content/Images/ajax-loader.gif")"
                         style="display: none" />
                </div>
            </div>
        </div>
        }
        <div id="searchresults"></div>
    </div>
</div>


@section scripts
{@Scripts.Render("~/bundles/jqueryUnobtrusive")
    <script>
        $("#PloegId").on("change",
            function() {
                $("form").trigger("submit");
            });
    </script>
}

_SearchWedstrijdenPartial.cshtml

@model IEnumerable<VoetbalMVC.Models.Wedstrijd>

<table class="table">
    <tr>
        <th>
            Thuisploeg
        </th>
        <th>
            Bezoekersploeg
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Stadion)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Datum)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Ploeg1.Naam)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Ploeg.Naam)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Stadion.Naam)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Datum)
        </td>
        <td>
            @Html.ActionLink("Order tickets", "Detail", new { wedstrijdId = item.Id })
        </td>
    </tr>
}
</table>

2 个答案:

答案 0 :(得分:2)

实际上,通过使用http://www.krex.me/not a real file jQuery选择器,您可以定位页面上的所有$("form")元素。您可以使用Fiddler,Postman或浏览器的开发人员工具验证从客户端提交到服务器的表单(通过点击 F12 CTRL + 在Windows / Linux上移位 + I ,或者在Mac上命令 + 选项 +

就注销表单而言,如果您尚未自定义MVC项目的文件夹/文件结构,则它应位于form

Views/Shared/_LoginPartial.cshtml

..所以它生成一个ID为@using Microsoft.AspNet.Identity @if (Request.IsAuthenticated) { using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) { // ... } } 的表单,但由于您一次提交所有表单,因此您每次都会注销该用户。

这意味着您需要修改调用以仅提交所需的表单。假设您的表单ID为#logoutForm,您可以执行以下操作:

AjaxForm

答案 1 :(得分:1)

这段代码导致错误

 $("form").trigger("submit");

如您所见,这包括所有表格。我怀疑这意味着注销按钮包含在某种形式中,在登录时会触发此操作。只需向AjaxForm添加一个Id,然后只触发该AjaxForm的提交。