ASP.NET MVC和AJAX

Dar*_*rov 12 ajax asp.net-mvc jquery

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

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

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

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

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

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


更新:

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

And*_*mer 9

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

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

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

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