Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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
跨多个页面请求共享复杂对象-C#MVC_C#_Asp.net_Asp.net Mvc 3 - Fatal编程技术网

跨多个页面请求共享复杂对象-C#MVC

跨多个页面请求共享复杂对象-C#MVC,c#,asp.net,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc 3,我有一个搜索功能,它在完成时将数据存储在一个通用列表中(list)。到目前为止,我一直在将viewmodel值分配给一个静态变量,以允许我在用户可能使用的任何页面请求上重复使用数据 不过,在今天阅读了一些内容之后,静态变量值似乎可以跨线程共享,这意味着如果我正在查看该站点,则包含我的搜索数据的静态变量可能会被其他用户修改 在我的阅读过程中,我看到了一些解决方案,例如向变量添加[ThreadStatic]属性,尽管这不仅不起作用,而且在我的进一步阅读中被认为是一个不合适的解决方案 其他人谈到在Ht

我有一个搜索功能,它在完成时将数据存储在一个通用列表中(
list
)。到目前为止,我一直在将viewmodel值分配给一个静态变量,以允许我在用户可能使用的任何页面请求上重复使用数据

不过,在今天阅读了一些内容之后,静态变量值似乎可以跨线程共享,这意味着如果我正在查看该站点,则包含我的搜索数据的静态变量可能会被其他用户修改

在我的阅读过程中,我看到了一些解决方案,例如向变量添加
[ThreadStatic]
属性,尽管这不仅不起作用,而且在我的进一步阅读中被认为是一个不合适的解决方案

其他人谈到在
HttpContext.Current.Items
中存储变量,但我的理解是,它只适用于单个请求

因此,我不确定这里的最佳解决方案——理想情况下,我不希望对我的应用程序进行太多根本性的更改,但简而言之,我希望能够跨多个请求共享复杂对象?这样做的最佳方法是什么


非常感谢

您能否只使用?

您能否只使用?

您可以在会话(HttpContext.session)对象中为每个用户分别存储应保存在内存中的对象。当然,您的部署必须支持会话。

您可以在会话(HttpContext.session)对象中为每个用户分别存储应在内存中持久化的对象。您的部署当然必须支持会话。

静态变量是一个错误的选择。您可以使用会话或视图状态。至于我,第一个更好。例如

    if (Session["tmp"] == null) Session["tmp"]=new DataSet();
    DataSet ds = (DataSet)Session["tmp"];
    {
      ...Do something with ds
    }       
    Session["tmp"] = ds;

您可以在页面或处理程序之间传递此数据集,但必须注意会话的生存期。

静态变量是一个错误的选择。您可以使用会话或视图状态。至于我,第一个更好。例如

    if (Session["tmp"] == null) Session["tmp"]=new DataSet();
    DataSet ds = (DataSet)Session["tmp"];
    {
      ...Do something with ds
    }       
    Session["tmp"] = ds;

您可以在页面或处理程序之间传递此数据集,但您必须关注会话的生命周期

谢谢-决定继续会话,它工作正常。谢谢-决定继续会话,它工作正常。