【问题标题】:Refresh several partial view刷新几个局部视图
【发布时间】:2010-09-24 13:04:46
【问题描述】:

有没有办法从控制器刷新几个局部视图? (返回视图())

谢谢,

更新1: 例如,我屏幕的内容部分分为两部分,左侧是客户列表,右侧是详细客户,左侧列表中选择的客户的详细信息。如果我创建一个新客户,当我保存时,我会刷新列表(左侧)并查看详细信息(右侧)

【问题讨论】:

  • 使用 Ajax 或通过 httpost,欢迎所有解决方案

标签: asp.net-mvc asp.net-mvc-2


【解决方案1】:

克里斯,

我能想到的唯一方法就是将多个局部视图嵌入到要刷新的主“视图”中。然后这些将在同一个周期中刷新。或者,您可以在主视图中嵌入自定义 html 帮助程序,在刷新视图时运行适当的代码。

对于单个操作的多个视图,我认为这既不是一个好主意,也不是任何可能的方法。

当然,规则是要被打破的:)

【讨论】:

    【解决方案2】:

    我认为没有任何自动方法可以做到这一点,但您可以使用一些约定:

    • 创建一个包含多个局部视图结果的自定义视图结果,即 MultiplePartialViewResult
    • 在自定义视图结果的执行中,调用每个提供的视图的执行方法。确保将每个都包装在 div 或其他容器中,以便在客户端脚本中检索
    • 在客户端脚本中收到 AJAX 调用的响应后,从每个容器中获取值并将其替换为与最初呈现的部分视图匹配的相应元素中

    对于最后一步,您可以使用约定。一个简单的方法是(如果每个局部视图只有一个实例)将要更新的目标 html 元素的 id 放入您在第二步中用来包装它的 div/container 中。

    【讨论】:

      【解决方案3】:

      根据您的说法,我认为最好使用 javascript 和 ajax 从服务器刷新。

      您可以使用 Html.RenderPartialAction 将其放在页面上,然后使用 ajax 和 javascript 加载它来实现 DRY。

      如果你使用的是 jQuery,那么这样的事情会起作用:

      jQuery("#divToReload1").load('Url/To/PartialAction')...
      jQuery("#divToReload2").load('Url/To/PartialAction')...
      

      只需将所有内容放在一个函数中,您就会立即重新加载所有部分。

      您可以通过使用data参数发送数据,并捕获回调函数为您所想。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-20
        • 2015-01-11
        • 1970-01-01
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多