我正在使用Ajax.BeginForm进行回传验证,它回发整个页面而不仅仅是UpdateTargetID.我已经查看了SO上的其他帖子,但没有找到答案.我已经构建了一个新的MVC4 Internet项目,仅用于测试(VS 2012已经使用’ASP.NET和Web Tools 2012.2’进行了更新).
这是我的代码
调节器
public ActionResult Index() { var vM = _db.Students.FirstOrDefault(); return View(vM); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Index(Student vM) { if (ModelState.IsValid) { //code if Model valid return Json(new { url = Url.Action("About","Controller") }); } ModelState.AddModelError(string.Empty,"AJAX Post"); return PartialView("Index",vM); }
视图
@model AJAX_Test.Models.Student @{ ViewBag.Title = "Student"; } <script src="~/Scripts/jquery-1.8.2.js"></script> <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script> <script type="text/javascript"> var onSuccess = function (result) { if (result.url) { window.location.href = result.url; } } // when server returns JSON object containing an url property redirect the browser </script> <h1>@ViewBag.Title</h1> <div id="IDXForm"> @using (Ajax.BeginForm("Index",new AjaxOptions() { UpdateTargetId = "IDXForm",OnSuccess = "onSuccess",HttpMethod = "Post" })) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) <span>@Html.EditorFor(m => m.FirstName) @Model.EnrollmentDate.ToShortDateString()</span> <input type="submit" value="Submit" /> } </div>
初步观点是:
提交后:
提交后正文的源代码:
<div id="body"> <section class="content-wrapper main-content clear-fix"> <script src="/Scripts/jquery-1.8.2.js"></script> <script src="/Scripts/jquery.unobtrusive-ajax.js"></script> <script type="text/javascript"> var onSuccess = function (result) { if (result.url) { window.location.href = result.url; } } // when server returns JSON object containing an url property redirect the browser </script> <h1>Student</h1> <div id="IDXForm"> <form action="/" data-ajax="true" data-ajax-method="Post" data-ajax-mode="replace" data-ajax-success="onSuccess" data-ajax-update="#IDXForm" id="form0" method="post"><input name="__RequestVerificationToken" type="hidden" value="vkCszJu-fKT6zUr5ys2StOTPF6a9pZdj5k1MyaAZKo8MPweS53dUuni0C9B17NjL_GVydHa7-jI1H0F9HrYEdKxeCWq9mCeER3ebaZYLxIs1" /><span><input class="text-Box single-line" id="FirstName" name="FirstName" type="text" value="Carson" /> 9/1/2005</span> <input type="submit" value="Submit" /> </form></div>
任何人都可以看到我的代码有什么问题吗?
谢谢.
解决方法
>在您的问题中,您已经显示了您的捆绑注册,但实际上是否已将它们包含在您的视图或布局中?确保在您的视图或布局中首先包含jquery.js,然后是jquery.unobtrusive-ajax.js(按此顺序):
@Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/jqueryval")
> jquery.unobtrusive-ajax.js脚本与jquery 1.9及更高版本不兼容,因为它依赖于.live()已经是removed in jQuery 1.9
.所以如果由于某种原因你已经将你的jQuery版本升级到1.9或更高版本,那就赢了工作.你应该降级.
>在onSuccess回调中,如果控制器操作返回JSON,则重定向到url.你有没有证实情况并非如此?因为当使用window.location.href重定向时,你得到一个完整页面重新加载而不是部分更新是很正常的
在所有情况下,使用javascript调试工具来查看到底发生了什么.如果您使用的是Firefox,那么您可以使用FireBug.如果您使用的是谷歌浏览器,则可以使用Chrome开发者工具栏.查看控制台,了解您可能遇到的潜在JavaScript错误.查看网络选项卡以查看是否已成功加载所有javascripts,并且您没有404错误.了解如何使用工具调试JavaScript代码.您会惊讶地发现有关这些工具将为您提供的代码可能存在的潜在问题的信息.