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