在MVC Ajax..BeginForm部分回发后运行Javascript

时间:2011-09-22 04:08:03

标签: javascript jquery asp.net-mvc

我使用ASP.NET MVC2获得了以下场景

我有一个部分视图,它使用Ajax.BeginForm来允许部分回发,AjaxOptions的OnSuccess属性指向js函数onPartialReloadSuccess。 updateTargetId位于BeginForm脚本中引用的父视图“Application”上。

这个局部视图本身会呈现许多其他部分视图,其名称是根据模型动态生成的

<% using (Ajax.BeginForm("Application", new AjaxOptions { UpdateTargetId = "mainframe", OnSuccess = "onPartialReloadSuccess" })) { %>

    <div id="breadcrumbs">
        <% Html.RenderPartial(Model.Breadcrumbs, Model);%>
    </div>

    <div id="action">
        <% Html.RenderPartial(Model.CurrentView, Model);%>
    </div>

<% } %>

我的问题如下 - 在部分回发之后,'onPartialReloadSuccess'js函数被成功调用而没有问题,非子视图中包含的javascript被重新运行。

它们最初被设置为在jQuery $(文档).ready()之后运行...这显然不适用于部分回发

我的问题是 - 有没有办法确保运行这些重新渲染的部分视图上的javascript?我看到很多asp.net表单的解决方案(使用scriptmanager和PageRequestManager),但没有什么特别的ASP.NET MVC?

提前感谢任何帮助

2 个答案:

答案 0 :(得分:0)

您可以将这些脚本外部化为单独的函数,然后在onPartialReloadSuccess函数中显式调用此函数。也可以在document.ready中调用它们,以便初始加载也能正常工作。

答案 1 :(得分:0)

看起来我在http://adammcraventech.wordpress.com/2010/06/11/asp-net-mvc2-ajax-executing-dynamically-loaded-javascript/找到了我需要的答案,下面的引言解释了这个问题

  

我一直在修改ASP.NET MVC2一段时间,当我通过MVC2&gt; AJAX动态加载部分视图时,我遇到了MVC2&gt;客户端验证不起作用的问题。经过进一步调查,我发现问题不仅限于MVC2&gt;客户端验证,而是限制通过MVC2 AJAX动态加载的所有JavaScript。 &gt;问题与将响应注入DOM元素的方式有关 - 通过&gt; InnerHTML属性。注入该属性的任何脚本块都不会被执行。