MVC4 Ajax.BeginForm没有替换UpdateTargetId

dro*_*ani 14 c# ajax ajax.beginform asp.net-mvc-4 razor-2

关于Ajax.BeginForm的问题有很多关于使用返回局部视图正确更新目标元素的问题:
mvc4 ajax更新同一页面
ASP.NET MVC 4 - Ajax.BeginForm和html5
MVC 4(razor) - 控制器是返回部分视图但整个页面正在更新
MVC 4 Ajax没有更新页面中的PartialView
但是,所有这些都可以通过手动写出jQuery ajax或包含丢失的javascript文件来回答.

  @using (Ajax.BeginForm("PostcardDetails", new AjaxOptions()
  {
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "details"
  }))
  {
    <div id="PostcardSearchResults">
      @{Html.RenderAction("PostcardSearchResults", Model);}
    </div>
  }
  <div id="details">
  </div>
Run Code Online (Sandbox Code Playgroud)

相关控制器代码:

[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)]
public ActionResult PostcardSearchResults(PostcardSearchFilter filter)
{
        PostcardSearchResults model = new PostcardSearchResults(filter);
        return PartialView("_PostcardSearchResults", model);
}
Run Code Online (Sandbox Code Playgroud)

在我的布局中,我引用了这些jQuery文件.此外,我已经验证页面正在输出正确的路径,并且它找到了正确的文件.我试着开关的顺序unobtrusive-ajax.min.jsvalidate.min.js,没有成功.

<script type="text/javascript" src="@Url.Content("~/Scripts/globalize.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.9.1.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-ui-1.10.0.custom.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>
Run Code Online (Sandbox Code Playgroud)

此外,在我的网站的根web.config和我的View文件夹中的web.config中,我包括:

<add key="webpages:Version" value="2.0.0.0"/>
<add key="PreserveLoginUrl" value="true"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
Run Code Online (Sandbox Code Playgroud)

我不知道还有什么地方可以看.没有抛出javascript错误,控制器被正确命中,返回一个PartialViewResult.HTML中的Form元素填充了所有正确的data-属性.

Gab*_*eno 13

没有与jquery.unobtrusive-ajax.min和JQuery 1.9因为jQuery 1.9不支持直播()方法的任何一个问题,.所以你应该使用JQuery migrate插件,并引用JQuery migrate js.

  • 我最终将我的jquery.unobtrusive-ajax.min.js回滚到原始文件(它将它带回到使用`live()`方法,并包含jQuery migrate插件.这解决了这个问题. (3认同)

小智 5

确保将unobtrusive-ajax.js包含在已放置ajax表单的页面上。

<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
Run Code Online (Sandbox Code Playgroud)