C# 在单个会话变量中保存多个值,然后检索它们

C# 在单个会话变量中保存多个值,然后检索它们,c#,asp.net-mvc-3,razor,session-variables,C#,Asp.net Mvc 3,Razor,Session Variables,我正在开发asp.net mvc3应用程序。我想它在某个地方被描述过,但是快速搜索并没有多大帮助,而且我对使用会话变量有很多不同的意见,但我仍然有一点时间来做决定 问题是我有一个razor视图,其中在图像库中显示图像,并且有权限的用户可以删除一个或多个图像。但是,我不能在用户单击按钮时删除每个图像,相反,我必须从用户那里收集已“删除”的图像的id(我删除了保存图像的span标记),但实际的删除是由服务执行的,我必须一次将所有数据传递给服务 所有这些都在Html.BeginForm中,因此数据是在

我正在开发asp.net mvc3应用程序。我想它在某个地方被描述过,但是快速搜索并没有多大帮助,而且我对使用会话变量有很多不同的意见,但我仍然有一点时间来做决定

问题是我有一个razor视图,其中在图像库中显示图像,并且有权限的用户可以删除一个或多个图像。但是,我不能在用户单击按钮时删除每个图像,相反,我必须从用户那里收集已“删除”的图像的id(我删除了保存图像的span标记),但实际的删除是由服务执行的,我必须一次将所有数据传递给服务

所有这些都在
Html.BeginForm
中,因此数据是在提交时收集的,在此之前,我需要一种方法以某种方式存储这些值。到目前为止,使用会话似乎是最简单的方法。我试过这样的方法:

public void DeletePicture(long documentImageID)
        {
            if (documentImageID != null)
            {
                Session["imagesIdForDeleting"] = documentImageID;
            }
        }
但是,通过一个简单的调试,我无法首先弄清楚如何从
会话[“imagesIdForDeleting”]
访问
documentImageID
值。我不知道这仅仅是语法问题,还是我想让事情变得比实际情况更简单。另外,我不确定是这样做,我实际上保存了所有的值,还是重写了以前的值,并且始终只有一个值存储在会话变量中。无论如何,对于如何实现这一权利的任何帮助都将不胜感激

我不确定这样做是否真的节省了所有的时间 值,或者重写以前的值,并且始终只有一个值 存储在会话变量中

是的,关于覆盖存储值,您是对的

使用键入的列表存储图像并将其置于会话中

public void DeletePicture(long documentImageID)
        {
            if (documentImageID != null)
            {
                if(Session["imagesIdForDeleting"]) == null
                {
                      Session["imagesIdForDeleting"] = new List<long>();
                 }

                ((List<long>)Session["imagesIdForDeleting"]).Add( documentImageID);
            }
        }
public void DeletePicture(长documentImageID)
{
if(documentImageID!=null)
{
如果(会话[“imagesIdForDeleting”])==null
{
会话[“imagesIdForDeleting”]=新列表();
}
((列表)会话[“imagesIdForDeleting”])。添加(documentImageID);
}
}
我不确定这样做是否真的节省了所有的时间 值,或者重写以前的值,并且始终只有一个值 存储在会话变量中

是的,关于覆盖存储值,您是对的

使用键入的列表存储图像并将其置于会话中

public void DeletePicture(long documentImageID)
        {
            if (documentImageID != null)
            {
                if(Session["imagesIdForDeleting"]) == null
                {
                      Session["imagesIdForDeleting"] = new List<long>();
                 }

                ((List<long>)Session["imagesIdForDeleting"]).Add( documentImageID);
            }
        }
public void DeletePicture(长documentImageID)
{
if(documentImageID!=null)
{
如果(会话[“imagesIdForDeleting”])==null
{
会话[“imagesIdForDeleting”]=新列表();
}
((列表)会话[“imagesIdForDeleting”])。添加(documentImageID);
}
}

您可以在
会话中存储列表

e、 g

public void DeletePicture(长documentImageID)
{
如果(会话[“imagesIdForDeleting”]==null)
{
会话[“imagesIdForDeleting”]=新列表();
}
if(documentImageID!=null)
{
变量列表=(列表)会话[“imagesIdForDeleting”];
列表。添加(documentImageID);
}
}

您可以在
会话中存储列表

e、 g

public void DeletePicture(长documentImageID)
{
如果(会话[“imagesIdForDeleting”]==null)
{
会话[“imagesIdForDeleting”]=新列表();
}
if(documentImageID!=null)
{
变量列表=(列表)会话[“imagesIdForDeleting”];
列表。添加(documentImageID);
}
}

为什么不先生成列表?过度访问会话是不好的(在这种情况下更不用说危险了-因为它仍然可能在设置和获取之间返回
null
,所以盲目地使用
Add
不是好消息)。为什么不先生成列表呢?过度访问会话是不好的(在这种情况下更不用说危险了-因为在设置和获取之间它仍然可能返回
null
,所以盲目地使用
Add
并不是好消息)。谢谢,工作完全符合我的预期。请允许我再问一个问题。当我想从同一控制器中的不同方法接受此会话变量中的值时,我该怎么做?通过再次抛出
var list=(list)会话[“imagesIdForDeleting”]
或者我应该使用其他东西来实现这一点?
列表
在这里可能仍然是
null
。而且
documentImageID
不能为
null
@Grant Thomas,你完全正确。我刚刚向勒隆提供了一个值得深思的想法。理想情况下,
if(documentImageID!=null)
应该是
if(documentImageID>0)
。我认为Leron只是提供了实际代码的骨架,因此我没有侵入那里。谢谢,工作完全符合我的预期。请允许我再问一个问题。当我想从同一控制器中的不同方法接受此会话变量中的值时,我该怎么做?通过再次抛出
var list=(list)会话[“imagesIdForDeleting”]
或者我应该使用其他东西来实现这一点?
列表
在这里可能仍然是
null
。而且
documentImageID
不能为
null
@Grant Thomas,你完全正确。我刚刚向勒隆提供了一个值得深思的想法。理想情况下,
if(documentImageID!=null)
应该是
if(documentImageID>0)
。我认为Leron只是提供了实际代码的骨架,因此我没有入侵那里。