【问题标题】:ASP.NET MVC ,Maintaining Model State between Ajax requestsASP.NET MVC,维护 Ajax 请求之间的模型状态
【发布时间】:2010-03-08 11:42:14
【问题描述】:

问题: 在第一个完整页面请求中,我的控制器调用 applicationServices 层(我的业务层的 Web 服务代理)以填充存储在我自己的控制器基类属性中的当前服务集合。然后将其显示在视图中。 该控制器上下文中的所有内容都可以访问此“服务集合”。现在,当我通过 AJAX 调用进一步调用相同的操作方法时,我显然遇到了该控制器的另一个实例,这意味着我的服务集合是空的。

所以除了重新获取整个集合之外,我会将这个集合存储在哪里,以便它在 ajax 请求之间持久化?我应该将它作为单独的 DomainModel 对象、Session 对象保存吗?....因为 ViewData 不适合我 obv。原谅我对 MVC 的无知 :)

任何帮助将不胜感激:)

【问题讨论】:

    标签: asp.net-mvc asp.net-ajax page-lifecycle


    【解决方案1】:

    Web 本质上是无状态的,MVC 帮助您深入了解,也就是说,MVC 不会尝试使没有状态的东西成为有状态的东西,这主要是您的 ASP 的路径:每个请求都是一个请求它自己的,它不应该知道过去执行的任何其他请求。

    我觉得最容易走这条路,因为它往往保持干净、快速,并帮助您遵守最佳实践,例如关注点分离。

    AJAX 更进一步:AJAX 的理念是可以实现一个简单的“删除”操作,即您只需要授权并在持久层上执行一个非常小的查询。就是这样。您甚至不需要将修改后的页面传回给用户。通过 JSON 提供一个简单的机器可读的成功/错误指示就足够了。

    如果您开始为小型 AJAX 请求提供大量服务,那么您真的失去了它的大部分好处。

    我还建议您不要在基本控制器中存储一堆服务。对于大多数请求,您可能只需要其中的一小部分。最好只检索您绝对需要的服务。

    【讨论】:

    • 谢谢。我有一个服务视图,其中包含一个 jqueryUI 选项卡插件。在第一个选项卡上,我拉回一个完整的服务列表,以及拉回完整列表,然后我根据某些标志将此列表过滤为 4 个单独的集合类别:1)可以监控 2)需要更新 3)是备份service etc.Then when each of tabs are selected i pull out their relevant collections for their tab.With your response in mind,are u saying i should initially do this filtering at the stored procedure level, and then just hit the db on every subsequent每个 JqGrid 请求的每个 tabor 请求?
    • 我不太明白你的意思。这与存储过程无关。标签本身基于一些服务列表?然后,您应该根据要求在相应的操作中提取该列表。现在可以使用 AJAX 加载实际的选项卡内容:除了它们自己的信息之外,它们不需要提取任何内容,并且它们将由控制器上的不同操作提供服务。然后标签的内容根据要求是最新的。这样可以最大限度地减少服务器负载(除非您知道用户将始终使用所有选项卡),但用户会有(轻微的)延迟。
    • Soz 造成混乱,我非常感谢您的帮助!好吧,它们自己的标签将在索引视图上被硬编码,因为每个标签将始终被使用(监控|备份|续订|完整等),每个选项卡的内容将是完整服务集合的子集(我在站点的第一个完整页面请求中获得)。因为我必须在其中一个控制器中过滤整个服务列表才能拆分列出不同类别(IList)。然后每个单独的列表填充一个局部视图,该视图通过 AJAX 返回到它们的每个相关选项卡内容。
    • 因此您需要获取一些ILists 来填充部分视图,但出于性能原因您只想获取一次Services-Thingie?
    • 是的,这是正确的,所以我在第一个完整 req 上填充 List,在某些属性上过滤它们,将它们存储为单独的集合。然后每个选项卡将通过 ajax req 请求其相关集合.我意识到我在这里显然违反了一些严重的 MVC 规则。我可以在 SEssion 中保留每个子集集合吗?...因为为每个选项卡内容点击 Db 不是一个选项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2016-12-30
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多