【问题标题】:Conflict between unobtrusive-ajax and jQueryunobtrusive-ajax 和 jQuery 之间的冲突
【发布时间】:2016-07-31 19:34:30
【问题描述】:

我有一个 MVC4 项目,我在其中使用 NuGet 安装 jQuery 3.1.0 和 Microsoft.jQuery.Unobtrusive.Ajax 3.2.3。我的包是这样的:

bundles.Add(new ScriptBundle("~/bundles/scripts").Include(
            "~/Scripts/jquery-3.1.0.min.js",
            "~/Scripts/jquery.unobtrusive-ajax.min.js",
            "~/Scripts/jquery.hoverIntent.minified.js",
            "~/Scripts/newScript.js",
            "~/Scripts/nav.js"
            ));

我有一个包含这样的 Ajax.BeginForm 块的视图:

@using (Ajax.BeginForm("ValidateBASFID", new AjaxOptions { UpdateTargetId = "ValidateBASFIDError", InsertionMode = InsertionMode.Replace }))
{
    <label class="required">BASF ID</label>@Html.ValidationMessageFor(model => model.BASFID, "", new { @class = "text-danger" })
    @Html.TextBoxFor(model => model.BASFID, new { style = "width: 50px; margin-right:20px; float:left;", @class = "form-control" })
    <input type="submit" value="Validate with BASF ID" class="smallButton" style="float:left;" />
    <div id="ValidateBASFIDError" class="validationError text-danger"></div>
    <div style="clear:both;"></div>
}

这个块指向一个控制器动作,如下所示:

public ActionResult ValidateBASFID(string BASFID)
{
    Models.Repositories.SectionRepository _repository = new Models.Repositories.SectionRepository();
    MemberVM Member = _repository.ValidateBASFID(BASFID);

    if (Member != null)
    {
        Member.SaveMemberInfo();

        return RedirectToAction("Sections", new
        {
            SectionSignupMasterID = Member.SectionSignupMasterID,
            VerificationEmail = Member.Email,
            MemberName = Member.FullName
        });
    }
    else
    {
        ViewBag.Message = "Invalid BASF ID";
        return PartialView("_ValidationError");
    }
}

我的想法是我将使用 AJAX 回发一个 ID 值并对其进行测试。如果 ID 有效,我将重定向到“部分”视图。如果 ID 无效,则返回错误消息。

发生的情况是有效的 ID 重定向到“部分”视图,但页面没有出现。唯一显示的是年份。它只是在页面的左上角显示“2016”。该页面在尝试从其他域检索图像时也卡住了。

如果我只注释捆绑包中的 unobtrusive-ajax,则视图重定向工作正常(但如果 ID 无效,我无法返回错误消息)。如果我只注释捆绑包中的 jQuery,则视图重定向工作正常(但其他客户端代码已损坏)。

为什么这两个脚本库似乎不能很好地协同工作,或者我可以做些什么来获得更多关于这里发生的事情的信息?谢谢。

【问题讨论】:

  • 你在做一个ajax。 ajax 的全部意义在于保持在同一页面上。他们从不重定向。进行正常提交,如果有错误,添加ModelStateError并返回视图

标签: jquery asp.net-mvc-4 unobtrusive-ajax


【解决方案1】:

斯蒂芬是对的。我稍微玩了一下代码,发现整个 Sections 视图都试图加载到 ajax.beginform 的目标中。由于页面底部的一些 javascript 而失败,但 Ajax 不用于重定向。

当我注释掉不显眼的库或 jQuery 时它起作用的原因是因为我正在破坏 ajax,它只是在进行标准回发。

更新:我还发现了 Stephen 的帖子 here,它解决了我的问题。

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多