2016-07-31 124 views
0

我有一个MVC4项目,我使用NuGet来安装jQuery 3.1.0和Microsoft.jQuery.Unobtrusive.Ajax 3.2.3。我的包是这样的:unobtrusive-ajax和jQuery之间的冲突

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有效,我会重定向到Sections视图。如果ID无效,则返回错误消息。

发生什么事是一个有效的ID重定向到Sections视图,但页面没有出现。唯一显示的是今年。它只是在页面的左上角显示“2016”。该页面也试图从不同的域中检索图像。

如果我只是评论一下unobtrusive-ajax,视图重定向工作正常(但如果ID无效,我不能得到错误消息)。如果我仅仅从捆绑包中评论jQuery,视图重定向工作正常(但其他客户端代码已损坏)。

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

+0

你制作一个ajax全部。阿贾克斯的整个观点要留在同一页面上。他们从不重定向。做一个正常的提交,如果有错误,添加一个'ModelStateError'并返回视图 –

回答

0

Stephen是对的。我玩了一段代码,发现整个Sections视图试图加载到ajax.beginform的目标中。它失败了,因为页面底部有一些javascript,但Ajax不适用于重定向。

当我评论出不引人注意的库或jQuery时,它的工作原因是因为我打破了ajax,它只是做了一个标准的回发。

更新:我发现一个帖子here斯蒂芬也解决了我的问题。