如何在点击Ajax.Actionlink时刷新多个局部视图

时间:2011-06-14 11:44:39

标签: asp.net-mvc asp.net-mvc-3 asp.net-ajax

我在View上使用多个部分视图。 在左手侧。我有一些链接按钮。

在中间,我有2个局部视图让我们假设Up和Down 我可以更新Up局部视图 现在我想点击同一个链接按钮

更新Down部分视图

我只能在Ajax.ActionLink按钮中发送一个UpdateTargetID 但我想点击同一个按钮更新2个部分视图。

1)我有没有办法在Ajax.ActionLink中传递多个UpdateTargetID 要么 2)我可以在Home Controller中返回多个部分视图 或者你建议的任何其他方式 请回复我

谢谢,大家回复 让我告诉你我为了一次点击刷新多个局部视图所做的工作 这是我用来点击的动作链接 这里我使用此Action链接的OnSucess函数进行更新,此Action链接在局部视图上

                 <%= Ajax.ActionLink("Select", "Employee", new { Id = Employee.EmployeeID }, new AjaxOptions { UpdateTargetId = "EmployeeDiv", HttpMethod = "Post", OnSuccess = "function(){EmployeeHistory(-2," + Employee.EmployeeID.ToString() + ");}" })%>

这是我从局部视图中调用的javascript

 function  EmployeeHistory(EmployeeID) {
    var url = '<%= Url.Action("PartialviewAction", "ControllerName") %>'
    $('#PartialviewDiv1').load(url, { Id: EmployeeID });
    var url1 = '<%= Url.Action("PartialviewAction", "ControllerName") %>'
    $('#PartialviewDiv2').load(url1, { Id: EmployeeID });

}

并且这两个div位于我要更新的索引视图中

        <div id="Paritalview div1"><% Html.RenderPartial("PartialViewname1"); %></div>
        <div id="Paritalview div2"><% Html.RenderPartial("PartialViewname2"); %></div>

1 个答案:

答案 0 :(得分:14)

是的 - 请勿使用Ajax.ActionLink

IMO,MS Ajax库,与Web Forms一样,是臃肿的。

保持简单 - 使用jQuery - 然后你完全控制:

$(function() {
   $('#somelink').click(function(e) {
      e.preventDefault();

      $.get('/controller/action1', function(data) {
         $('#up').html(data);
      });

      $.get('/controller/action2', function(data) {
         $('#down').html(data);
      });
   });
});

但是,由于你要更新两个面板,我建议将这两个中间面板包装在它自己的局部视图中 - 然后通过一个动作方法提供 - 这样你只需要1个ajax调用。

修改

正如@FelixM所提到的,您应该使用Url.ActionUrl.RouteUrl来生成AJAX调用的URL,因此如果您的路由发生变化,那么您的JS不需要,例如:

.get('@Url.Action('Controller', 'Action1')', function(data)

.get('@Url.RouteUrl('SomeNamedRoute')', function(data)

如果您将此脚本放在外部文件中,则需要使用一种技术在主视图中设置url,然后从外部变量中读取。

这些技术包括JavaScript变量,隐藏字段,传递URL作为参数等等。