跨多个页面请求共享复杂对象-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;
您可以在页面或处理程序之间传递此数据集,但您必须关注会话的生命周期谢谢-决定继续会话,它工作正常。谢谢-决定继续会话,它工作正常。