MVC4Ajax.BeginForm不替换UpdateTargetId关于Ajax.BeginForm,使用returnpartialview正确更新目标元素有很多问题:mvc4ajaxupdatethe同一页ASP。NETMVC4-Ajax.BeginForm和html5MVC4(razor)-控制器返回部分视图,但整个页面正在更新MVC4Ajax没有更新页面中的PartialView但是,所有这些都可以通过手动写出jQueryajax或包含缺失来完成javascript文件来解析。@using(Ajax.BeginForm("PostcardDetails",newAjaxOptions(){InsertionMode=InsertionMode.Replace,UpdateTargetId="details"})){@{Html.RenderAction("PostcardSearchResults",Model);}}相关控制器代码:[AcceptVerbs(HttpVerbs.Post|HttpVerbs.Get)]publicActionResultPostcardSearchResults(PostcardSearchFilterfilter){PostcardSearchResults模型=newPostcardSearchResults(filter);返回PartialView("_PostcardSearchResults);"在我的布局中,模型}这些jQuery文件。此外,我已经验证该页面输出的路径正确,并且它找到了正确的文件。我试过切换unobtrusive-ajax.min.js和validate.min.js的顺序但没有成功。此外,在我网站的根web.config和我的View文件夹的web.config中,我已经包括:我不知道还有什么地方可以看。没有抛出javascript错误,控制器被正确命中,返回PartialViewResult。HTML中的Form元素填充了所有正确的数据属性。jquery.unobtrusive-ajax.min和JQuery1.9有问题,因为JQuery1.9不再支持live()方法。所以你应该使用JQuerymigrateplugin,参考JQuerymigratejs。确保在放置ajax表单的页面中包含unobtrusive-ajax.js。我遇到了这个问题,我刚从NuGet安装了最新的unobtrusive包,它解决了问题,并且所有代码都已正确实现。我检查了包管理器以查看是否需要更新任何脚本以及jQuery和jquery.unobtrusive-ajax。jQuery从1.9移动到1.9.1。当我重建我的解决方案时,目标DIV已成功更新。尝试更新解决方案中的所有JS,它可能会起作用。以下需要在任何使用ajax的页面上。@sectionScript{@Scripts.Render("~/bundles/jqueryval")}我不知道是否还有其他人遇到过这个问题,但就我而言,它似乎没有更新。我正在构建一个简单的编辑表单,您可以在其中从下拉列表中选择要编辑的项目,单击按钮,AJAX会加载所选项目的编辑表单。它第一次工作,但在更改下拉列表中的选择并单击按钮后,所有表单值都没有更改,即使我验证了我的服务器端代码正在将新项目加载到视图模型中。所以看起来替换不起作用。在单步执行jquery.unobtrisive-ajax.js之后,我发现它正在替换我的目标元素的内容,只是使用我已有的相同视图标记,这与传递给视图的模型不匹配!就在我意识到的时候,是ModelState让我成为了ModelState。我第二次点击加载按钮时,它提交了我的下拉选择,还有我填写的编辑表单。编辑表单中的所有值都已添加到ModelState(如您所料)。然后,我的控制器代码将提交的视图模型(从编辑表单值创建的模型联编程序)替换为所选下拉值的视图模型,并将其传递给部分视图。但是,部分视图使用了一堆Html.[X]For助手。这些忽略更新的视图模型并直接从ModelState中提取它们的值。例如:@Html.DisplayFor(m=>m.Name)@Model.Name会为Name显示两个不同的值;前者显示提交的名称,后者显示更新后的名称。这是允许MVC在(服务器端)验证错误后记住用户表单条目的机制。在这种情况下,由于这是部分页面加载,我只是丢弃所有提交的值并且我不需要任何ModelState值,所以我只是在返回我的更新视图之前调用ModelState.Clear()以查看模型。publicActionResultGetItemEditForm(EditItemsViewModeleditItemsVM){if(editItemsVM.SelectedItemID!=null){//加载选中的itemItemsModelManager.GetEditItemsVM(editItemsVM);//清除提交的表单值ModelState.Cleardi();}return_Partial",editItemsVM);}对于那些需要更多解释的人....在包管理器控制台PM>Install-PackagejQuery.Migrate中键入此内容在您的部分视图中引用此内容:scriptsrc="~/Scripts/jquery.unobtrusive-ajax.js">祝大家编码愉快。用户xr280xr的回答包括ModelState.Clear();对我有用。我正在使用的应用程序是在较旧的jQ(1.7.x)上,因此迁移在我们的环境中不起作用案例。清除控制器中的模型状态正是我们期望BeginForm做的。检查主页或您的页面关于jquery.unobtrusive-ajax.js的脚本参考,如果没有添加关于此js的参考:jquery.unobtrusive-ajax。jslive()方法在jQuery1.7版本中被弃用,在1.9版本中被删除。请改用on()方法。有关更多信息,请参见:http://www.w3schools.com/jquery/event_live.asp哇,这么多在这里回答。我的问题是由于引导程序面板。它正在创建一个“嵌套”面板。我删除了面板标记,只使用了一个普通的旧div,它工作正常。我认为UpdateTargetId必须是AJAX表单的直接父级。这是说明问题的html。@using(Ajax.BeginForm("EditNote",new{id=Model.Id},newAjaxOptions{UpdateTargetId="notes-form"},htmlAttributes:new{@class="form-horizo??ntal"})){}首先,从NuGetManager安装'Microsoft.JQuery.Unobtrusive.Ajax',然后在包含'jquery-{version}.js'之后在'BundleConfig'中包含'~/Scripts/jquery.unobtrusive';类似这样:以上是C#学习教程:MVC4Ajax.BeginForm没有替换UpdateTargetId共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注—bundles.Add(newScriptBundle("~/bundles/jquery").Include("~/Scripts/jquery-{version}.js","~/Scripts/jquery.unobtrusive*));本文摘自网络,不代表立场,如涉及侵权,请点击右下角联系管理员已被会员删除.若转载请注明出处:
