【问题标题】:How to refresh multiple partialview on click of Ajax.Actionlink如何在单击 Ajax.Actionlink 时刷新多个局部视图
【发布时间】:2011-09-14 15:17:38
【问题描述】:

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

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

我只能在 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>

【问题讨论】:

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


【解决方案1】:

是的,不要使用Ajax.ActionLink

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

保持简单 - 使用 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 作为参数传递给函数等。

【讨论】:

  • 好答案。只是为了确定,不要显式放置 Controller/Action URL,而是使用 Url.Action 来呈现正确的 URL。
  • 感谢您的回复,我需要更新一些东西,我正在使用 3 个局部视图,我单击的链接在左侧,它也在局部视图上,我我是 MVC 新手,请告诉我如何使用它
  • +1,同意,完全控制会带来幸福。如果我需要同时更新与部分视图相对应的页面的多个区域,我会在“RenderViewToString”实现的帮助下使用带有 json 响应的单个操作来完成。
  • @user674363 - 简单地说“我是 MVC 新手”并不能让我们解决您的问题,而是告诉我们需要了解多少细节。所以听起来你有 3 个面板:LHS,然后是中间的两个。你想更新所有三个吗?如果这是用户单击的位置,为什么要更新 LHS 面板(例如,听起来 LHS 是“菜单”,中间是数据)
  • 根据要求 LHS 上的面板每分钟更新一次,当单击 LHS 上的任何选择链接按钮时,RHS 上的面板应更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 2015-01-26
  • 2014-08-20
相关资源
最近更新 更多