Ajax Post没有到达服务器

时间:2014-03-03 02:01:48

标签: jquery ajax asp.net-mvc

我不确定发生了什么。奇怪的是,这曾经起作用,突然之间就被打破了。我不认为这是jQuery的一个突破,因为我的不引人注目的验证工作得很好。如果我在控制器上设置了断点,我就不会在按下按钮时到达它。

<div class="signup-wrapper">
<h3>Register to get updates and contest details</h3>
@using (Ajax.BeginForm("EmailList", "Account", new AjaxOptions
{
UpdateTargetId = "signup-wrapper",
InsertionMode = InsertionMode.Replace,
HttpMethod = "Post"
}))
{
    @Html.AntiForgeryToken()
    @Html.LabelFor(P => P.FirstName)
    <br />
    @Html.TextBoxFor(P => P.FirstName)
    <br />
    @Html.LabelFor(P => P.LastName)
    <br />
    @Html.TextBoxFor(P => P.LastName)
    <br />
    @Html.LabelFor(P => P.Email)
    <br />
    @Html.TextBoxFor(P => P.Email)
    <br />
    @Html.ValidationMessageFor(P => P.Email)
    <br />
    @Html.LabelFor(P => P.EmailConfirmation)
    <br />
    @Html.TextBoxFor(P => P.EmailConfirmation)
    <br />
    @Html.ValidationMessageFor(P => P.EmailConfirmation)
    <br />
    <input type="submit" value="Go!" />
}
</div>

控制器代码

[ValidateAntiForgeryToken]
    [AllowAnonymous]
    [HttpPost]
    public ActionResult EmailList(GarageViewModels.EmailListSignUpViewModel vM)
    {
        if (ModelState.IsValid)
        {
            using (var context = new JDMExchangeEntities())
            {
                context.EmailLists.Add(vM.ReturnModel());
                context.SaveChanges();
                ViewBag.IsSignedUp = true;
                return PartialView("EmailSignUpConfirmation");
            }
        }

        return View("Index");
    }

有人看到任何明显的东西吗?我打开了chrome工具,看到请求实时发生,我所能看到的只是验证jquery发出请求,但无论我点击提交多少次,我都不会看到任何类型的请求被发送。

更新1

添加我的jQuery库调用以供参考

Layout.Mobile

<head>
<meta name="viewport" content="width=device-width" />
<title>Modded JDM Cars</title>
<link href="@Url.Content("~/Content/swipe_style.css")" rel="stylesheet" type="text/css" />
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/jqueryval")
<script src="~/Scripts/modernizr-2.5.3.js"></script>
<script src="~/Scripts/swipe.js"></script>

捆绑注册

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                    "~/Scripts/jquery-ui-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));  

更新2 - 故障排除程序

第一步

我检查了Google Chrome中的网络标签,看到发送到服务器的请求,看到我的jQuery验证工作正常但出于某种原因,当我按下提交按钮时,我从未向控制器发送过请求。根据第二条评论,我用一些jquery拦截了表单提交,并发出警报以确保帖子确实正在通过。肯定是。

第二步

既然我知道帖子正在发送但我的控制器没有收到,我认为这可能是我的viewmodel中的编码问题,因为如果有错误,ajax请求似乎无声地失败。在发布请求之前,我使用远程处理发出了一个Get请求,以便仔细检查是否存在任何现有的电子邮件。我为其添加了[AllowAnonymous][HttpGet]属性并再次进行了测试。

      [AllowAnonymous]
    [HttpGet]
    public JsonResult IsEmailUnique(string Email)
    {
        using (var context = new JDMExchangeEntities())
        {
            var item = context.EmailLists.SingleOrDefault(P => P.Email == Email);

            if (item == null)
                return Json(true, JsonRequestBehavior.AllowGet);
            else
                return Json("Email is already registered.", JsonRequestBehavior.AllowGet);
        }
    }  

似乎我的webapp在这部分代码中失败了。在第一个Get请求失败后,以下POST请求也将失败。现在帖子有效,但在下一次更新中提交了两次以上。

1 个答案:

答案 0 :(得分:0)

问题的初始问题已经解决,并作为问题本身的更新而写下来。最后一个问题涉及将ajax发送两次到服务器。事实证明这是我正在使用的捆绑包。我认为可能有一个重复的<script src="~/Scripts/jquery-1.7.1.min.js"></script>,因为小提琴手将这段javascript作为帖子的来源。我删除了捆绑包并简单地使用了

<script src="~/Scripts/jquery-1.7.1.min.js"></script>
<script src="~/Scripts/jquery-ui-1.8.20.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>  

代替。这解决了发送的重复帖子。