Автоматический выход из системы при вызове Ajax в ASP.net - PullRequest
0 голосов
/ 17 мая 2018

У меня есть выпадающий список с различными футбольными клубами из моей базы данных.Когда я выбираю один из них, будет сделан вызов ajax, чтобы показать все игры, в которые будет играть Клуб.

Проблема заключается в том, что всякий раз, когда я вхожу в систему как AspNetUser, я автоматически выхожу из системы, как только я отправляюdropdownlist.

Когда я не вошел в систему, все работает как надо.

Я действительно запутался, почему именно это происходит.

Контроллер

[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 голосов
/ 17 мая 2018

Действительно, используя селектор $("form") jQuery, вы нацеливаете все элементы form на странице. Вы можете проверить формы, отправленные с клиента на сервер, с помощью таких инструментов, как Fiddler, Postman или инструменты разработчика вашего браузера (нажав F12 или CTRL + Shift + I в Windows / Linux или Команда + Параметр + I в Mac).

Что касается формы выхода из системы, если вы не настроили структуру папок / файлов в своем проекте MVC, она должна находиться в Views/Shared/_LoginPartial.cshtml:

@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated)
{
    using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
    {
        // ...
    }
}

.. поэтому он генерирует форму с идентификатором #logoutForm, но, поскольку вы отправляете все формы одновременно, вы впоследствии выходите из системы каждый раз.

Это означает, что вам нужно изменить вызов, чтобы отправить только ту форму, которую вы хотите. Предполагая, что идентификатор вашей формы AjaxForm, вы должны сделать:

$("#AjaxForm").trigger("submit");
0 голосов
/ 17 мая 2018

Этот фрагмент кода вызывал ошибку

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

Как вы можете видеть, это включает в себя все формы.Я подозреваю, что это означает, что кнопка выхода из системы включена в некую форму, которая запускает это действие при входе в систему. Просто добавьте Id к вашей AjaxForm и только инициируйте отправку этой AjaxForm.

...