Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC,维护Ajax请求之间的模型状态_Asp.net Mvc_Asp.net Ajax_Page Lifecycle - Fatal编程技术网

Asp.net mvc ASP.NET MVC,维护Ajax请求之间的模型状态

Asp.net mvc ASP.NET MVC,维护Ajax请求之间的模型状态,asp.net-mvc,asp.net-ajax,page-lifecycle,Asp.net Mvc,Asp.net Ajax,Page Lifecycle,问题: 在第一个完整页面请求中,我的控制器调用applicationServices层(我的业务层的Web服务代理),以填充存储在我自己的控制器基类属性中的当前服务集合。然后将在视图中显示。 该控制器上下文中的所有内容都可以访问此“服务集合”。现在,当我通过AJAX调用进一步调用同一操作方法时,我显然命中了该控制器的另一个实例,这意味着我的服务集合是空的 因此,除了重新获取整个集合外,我将在何处存储此集合以便在ajax请求之间持久化它?我应该将其作为单独的DomainModel对象、会话对象保存

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

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


任何帮助都将不胜感激:)

web本质上是无状态的,而MVC帮助您深入到最底层,也就是说,MVC不会试图使非状态的东西有状态,这主要是旧ASP的路径:每个请求都是它自己的请求,它不应该知道过去执行过的任何其他请求

我觉得完全按照这条路线走是最容易的,因为它往往保持干净、快速,并帮助您坚持最佳实践,例如分离关注点

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

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


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

谢谢。我有一个服务视图,其中包含一个jqueryUI标签插件。在第一个选项卡上,我拉回完整的服务列表,以及拉回完整的列表,然后,我根据特定标志将此列表筛选为4个独立的集合类别:1)可监控2)需要续订3)是备份服务等。然后,当选择每个选项卡时,我会为其选项卡提取其相关集合。考虑到您的回答,您是说我应该首先在存储过程级别进行此筛选,然后在后续的每个请求中点击db,尽管是针对每个Tab或每个JqGrid请求?我真的不明白你的意思。这与存储过程无关。选项卡本身基于一些服务列表?然后,您应该根据请求在相应的操作中提取该列表。现在,可以使用AJAX加载实际的选项卡内容:它们不需要提取任何内容,只需要自己的信息,并且它们将由控制器上的不同操作提供服务。然后,选项卡的内容将根据请求更新。这将最小化服务器负载(除非您知道用户将始终使用所有选项卡),但用户将有一个(轻微)延迟。Soz的困惑,因为我非常感谢您的帮助!好吧,选项卡本身将在索引视图中硬编码,因为每个选项卡都会一直被使用(监视|备份|更新|完整等),每个选项卡的内容都将是完整服务集合的子集(我在站点的第一个完整页面请求中获得)。因为我必须在其中一个控制器中过滤整个服务列表,以便将列表拆分为不同类别(ILists)。然后,每个单独的列表填充一个部分视图,该视图通过AJAX get返回到每个相关选项卡内容。因此,为了填充部分视图,您需要获取一些
ILists
,但出于性能原因,您只想获取一次服务内容?是的,这是正确的,因此我在第一次完整请求时填充了一个列表,在某些属性上过滤它们,将它们存储为单个集合。然后每个选项卡将通过ajax请求请求其相关集合。我意识到我在这里显然违反了一些严肃的MVC规则。我可以在会话中保存每个子集集合吗?…因为为每个选项卡内容点击Db不是一个选项