【问题标题】:ASP.NET MVC and AJAXASP.NET MVC 和 AJAX
【发布时间】:2011-08-25 15:26:25
【问题描述】:

我有一个由顶部、左侧和底部标题和一个主要内容窗格组成的视图。假设在 AJAX 请求期间,我需要更新顶部、底部和主面板的 HTML(左侧标题应保持不变)。

我想知道实现这一点的最佳方法是什么。第一个想法是将主内容面板放入一个局部面板,并有一个控制器操作将返回 PartialView。这不起作用,因为该操作仅返回主窗格的 HTML,我无法更新顶部和底部标题。

因此,如果我将顶部和底部标题放入它们各自的局部视图中,我将需要我的控制器操作来返回多个局部视图。这是可能的,还是我正在做一些完全偏离轨道的事情?

我看到render a partial view to a string 是可能的,所以我认为我可以在操作中使用这种技术来返回一个 JSON 对象,该对象具有 3 个属性,代表我需要更新的 3 个部分的 HTML。但如果可能的话,这对我来说是一种非常错误的方法。

我的另一个想法是返回一个仅包含部分所需数据的 JSON 对象,并使用 javascript 来构造 HTML。但是在 javascript 中构建 UI 看起来是一项艰巨的工作(主要内容部分使用 MvcContrib 的 GridView 进行分页和排序)。

因此,我非常感谢有关处理这种情况的最干净方法的建议。自适应解决方案也很棒:例如,如果用户有 javascript禁用它只会重新加载没有AJAX的整个页面。


更新:

Andrew Siemersuggested 将每个部分放入自己的局部视图并执行多个 ajax 请求。这似乎是一种完全有效的方法,但不幸的是,它不适用于我的场景,因为我在最初的问题描述中遗漏了以下细节:顶部标题实际上用于显示主面板中发生的事件的错误/信息消息。因此,例如,我需要显示错误消息,以防在获取主面板的模型时引发异常。因此,为了更新这两个面板,只能发出一个请求。

【问题讨论】:

标签: jquery asp.net-mvc ajax


【解决方案1】:

您可以轻松地将每个部分放入其自己的局部视图中。这将允许您在提交/更改数据后为每个视图发出 jquery 请求。然后可以将每个呼叫推送到适当的部分。这是非常可行的,听起来很合适。

我不希望您的控制器返回多个部分视图...因为这会破坏 SRP!

更新:随着您的更新...您仍然可以单独获取这些部分。这只是需要您多一点 ajax 的酷炫,因为每次 fetch 都可以返回一个错误块(通过 JSON 请求)。如果返回任何错误,则可以在标题中显示这些错误消息。或者......一旦所有其他请求都报告回来,您可以使标头请求持续出现错误,在这种情况下,每个部分视图都可以将其错误消息扔到错误状态的会话变量中......然后将这些消息显示在标题。

选择每个部分作为它自己的部分而不是一个超级请求的一个重要原因可能在最初的设计中并不明显。通过单独控制每个部分,您可以做一些花哨的事情,例如独立缓存每个部分,在一个区域提供比另一个区域更频繁的更新等。

【讨论】:

  • 感谢安德鲁的提示。不幸的是,我在最初的描述中遗漏了一个重要的细节,所以我担心这个建议不能应用于我的场景。我已经相应地更新了我的问题。
【解决方案2】:

这是一个棘手的问题。这个怎么样?

为每个组件 top、left、main 设置一个 partial request,每个组件都返回一个包含该区域所需数据的局部视图。然后每次主面板中有事件时,都会刷新每个区域中的部分以更新它们。

或者将它们全部放在固定计时器上以轮询新数据。

【讨论】:

    【解决方案3】:

    如何在主视图的隐藏 div 中包含顶部和右侧视图,并在加载时将它们移动到正确的位置?

    【讨论】:

      【解决方案4】:

      我知道这个问题已经得到解答,但我想我只是提出一个建议:

      • Backbone.js 和 jQuery 模板可以轻松解决您的问题。

      (只是将这里留在这里作为对阅读此问题的人们的建议)

      【讨论】:

        猜你喜欢
        • 2019-08-09
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 1970-01-01
        • 2010-09-08
        相关资源
        最近更新 更多