我在我的数据库中有一个包含不同足球俱乐部的下拉列表。当我选择一个时,将进行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>
答案 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的提交。