ASP.NET MVC 和 AJAX

问题描述 投票:0回答:4

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

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

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

我看到可以将部分视图呈现为字符串,所以我认为我可以在操作中使用此技术来返回一个 JSON 对象,该对象具有 3 个属性,表示我需要更新的 3 个部分的 HTML。但如果可能的话,这对我来说感觉是一种非常错误的方法。

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

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


更新:

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

javascript jquery ajax asp.net-mvc
4个回答
9
投票

您可以轻松地将每个部分放入其自己的部分视图中。 一旦您的数据被提交/更改,这将允许您为每个视图发出 jquery 请求。 然后,每个调用都可以被推送到适当的部分。 这是非常可行的,听起来像是合适的路径。

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

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

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


0
投票

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

为顶部、左侧、主每个组件设置一个“部分请求”,每个组件都会返回一个部分视图,其中包含该区域所需的数据。然后,每当主面板中发生事件时,就会开始刷新每个区域中的部分以更新它们。 或者让它们全部使用固定计时器来轮询新数据。


0
投票


0
投票

Backbone.js 和 jQuery 模板将轻松解决您的问题。
  • (只是将其留在这里作为对阅读此问题的人的建议)

© www.soinside.com 2019 - 2024. All rights reserved.