Ajax.BeginForm不会触发AJAX脚本,落后于回发

前端之家收集整理的这篇文章主要介绍了Ajax.BeginForm不会触发AJAX脚本,落后于回发前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我会更新这个问题的解决方案,我想包括我的问题和解决方案,因为我无法找到它在Stackoverflow.如果你想与解决方案一起跳跃,请随时随地.

我有一个新创建的使用Visual Studio 2013创建的“空”MVC5项目.如果可能,我需要一个来自并希望的AJAX行为.使用Ajax.BeginForm在MVC3中始终是直截了当的,所以我认为它也将在MVC5中.

但是,当我单击提交按钮时,不会调用在AjaxOptions中的OnBegin,OnFailure或OnSuccess中指定的JavaScript函数.相反,Ajaxless的帖子被发送到服务器,这通过检查返回false的Request.IsAjaxRequest来证明是正确的.

我得出结论,由于某种原因,那么,ajax根本就没有被使用.我检查了一些事情,如web.config,我的布局脚本等.

我的布局包括以下脚本:

  1. <script src="~/Scripts/jquery-1.5.1.min.js"></script>
  2. <script src="~/Scripts/jquery.validate.min.js"></script>
  3. <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

我的web.config包括

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3. <appSettings>
  4. <add key="ClientValidationEnabled" value="true" />
  5. <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  6. </appSettings>
  7. </configuration>

我的看法:

  1. @model ContactEnquiryviewmodel
  2.  
  3. @{
  4. AjaxOptions ContactOptions = new AjaxOptions()
  5. {
  6. OnBegin = "OnConactFormBegin()",OnSuccess = "OnContactFormSuccess()",OnFailure = "OnContactFormFailure()"
  7. };
  8. }
  9.  
  10. <div id="EnquiryFormContainer">
  11.  
  12. @using (Ajax.BeginForm("Contact","Home",new { formName = "EnquiryForm" },ContactOptions))
  13. {
  14. @Html.HiddenFor(m => m.Subject)
  15.  
  16. <div class="field">
  17. @Html.LabelFor(m => m.FirstName)
  18. @Html.TextBoxFor(m => m.FirstName)
  19. <div class="validation">
  20. @Html.ValidationMessageFor(m => m.FirstName)
  21. </div>
  22. </div>
  23.  
  24. <div class="field">
  25. @Html.LabelFor(m => m.LastName)
  26. @Html.TextBoxFor(m => m.LastName)
  27. <div class="validation">
  28. @Html.ValidationMessageFor(m => m.LastName)
  29. </div>
  30. </div>
  31.  
  32. <div class="field">
  33. @Html.LabelFor(m => m.Email)
  34. @Html.TextBoxFor(m => m.Email)
  35. <div class="validation">
  36. @Html.ValidationMessageFor(m => m.Email)
  37. </div>
  38. </div>
  39.  
  40. <div class="field">
  41. @Html.LabelFor(m => m.PhoneNumber)
  42. @Html.TextBoxFor(m => m.PhoneNumber)
  43. <div class="validation">
  44. @Html.ValidationMessageFor(m => m.PhoneNumber)
  45. </div>
  46. </div>
  47.  
  48. <div class="field">
  49. @Html.LabelFor(m => m.Comments)
  50. @Html.TextAreaFor(m => m.Comments)
  51. <div class="validation">
  52. @Html.ValidationMessageFor(m => m.Comments)
  53. </div>
  54. </div>
  55.  
  56. <div id="submitButtonContainer">
  57. <input type="submit" value="Submit" name="submit" />
  58. </div>
  59. }
  60. </div>

我的控制器动作(未完成):

  1. [HttpPost]
  2. public ActionResult Contact(Contactviewmodel viewmodel,String formName = "")
  3. {
  4. if (Request.IsAjaxRequest())
  5. {
  6. return new EmptyResult();
  7. }
  8.  
  9. return new EmptyResult();
  10. }

我已经检查了一些关于这个问题的其他帖子,找不到解决方案.虽然有人暗示了可能的解决方案,但我对Microsoft CDN(http://www.asp.net/ajaxlibrary/cdn.ashx)感到困惑.

在Microsoft CDN上,他们有以下部分:

以下ASP.NET MVC JavaScript文件托管在此CDN上:

  1. ASP.NET MVC 5.0
  2.  
  3. http://ajax.aspnetcdn.com/ajax/mvc/5.0/jquery.validate.unobtrusive.js
  4. http://ajax.aspnetcdn.com/ajax/mvc/5.0/jquery.validate.unobtrusive.min.js
  5.  
  6. ASP.NET MVC 4.0
  7.  
  8. http://ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.js
  9. http://ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js
  10.  
  11. ASP.NET MVC 3.0
  12.  
  13. http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.js
  14. http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.min.js
  15. http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js
  16. http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js
  17. http://ajax.aspnetcdn.com/ajax/mvc/3.0/MicrosoftMvcAjax.js
  18. http://ajax.aspnetcdn.com/ajax/mvc/3.0/MicrosoftMvcAjax.debug.js
  19.  
  20. ASP.NET MVC 2.0
  21.  
  22. http://ajax.aspnetcdn.com/ajax/mvc/2.0/MicrosoftMvcAjax.js
  23. http://ajax.aspnetcdn.com/ajax/mvc/2.0/MicrosoftMvcAjax.debug.js
  24.  
  25. ASP.NET MVC 1.0
  26.  
  27. http://ajax.aspnetcdn.com/ajax/mvc/1.0/MicrosoftMvcAjax.js
  28. http://ajax.aspnetcdn.com/ajax/mvc/1.0/MicrosoftMvcAjax.debug.js

他们似乎建议MVC5需要的唯一脚本是jquery.validate.unobtrusive.

获取本地副本作为您的MVC项目的一部分“ 从VS2013,右键单击您的MVC 5项目,选择“管理NuGet软件包”. 选择“在线”并搜索“jquery.unobtrusive-ajax”,然后安装“Microsoft.jQuery.Unobstusive.Ajax”.

猜你在找的Ajax相关文章