字典和会话+;C#

字典和会话+;C#,c#,asp.net,session,C#,Asp.net,Session,我正在尝试使用字典来保存文件上载控件的值。用户可以上载总共5个文档。一次一份文件。我使用了C#和ASP.NET。我尝试了以下方法,但不确定如何将字典数据添加到viewstate。 //字典声明 private new Dictionary<string, string> AttachmentNames { get { if (Session["AttachmentNames"] != nu

我正在尝试使用字典来保存文件上载控件的值。用户可以上载总共5个文档。一次一份文件。我使用了C#和ASP.NET。我尝试了以下方法,但不确定如何将字典数据添加到viewstate。 //字典声明

private new Dictionary<string, string> AttachmentNames
        {
            get
            {
                if (Session["AttachmentNames"] != null)
                {
                    return (Dictionary<string, string>)Session["AttachmentNames"];
                }
                else
                {
                    return new Dictionary<string, string>();
                }
            }

            set
            {
                Session["AttachmentNames"] = value;
            }
        }
由于数据未添加到viewstate,因此每次上载文件时,只有最后一个文件被添加到字典中。如何将字典添加到视图状态并利用它向字典添加项。现在,每回发帖都会丢失数据。如何添加和更新字典数据以查看状态? 谢谢

将字典数据添加到viewstate

呃,这似乎是个坏主意。视图状态被加密并放入HTML中。内容在每次请求时来回发送。因此,如果你上传一个100MB的文件,每个请求和响应的大小至少为100MB

更好的存储位置是
会话
对象,您可以在其中暂时保存上载的文件。如有必要,您可以将文件的密钥置于视图状态,以便始终将其与
会话中存储的文件关联起来

将字典数据添加到viewstate

呃,这似乎是个坏主意。视图状态被加密并放入HTML中。内容在每次请求时来回发送。因此,如果你上传一个100MB的文件,每个请求和响应的大小至少为100MB


更好的存储位置是
会话
对象,您可以在其中暂时保存上载的文件。如有必要,您可以将文件的键置于视图状态,这样您就可以始终将其与
会话中存储的文件关联起来

我认为可以将属性简化为这样。此优化允许在属性中完全管理会话变量的状态,从而简化调用方代码。此代码应与您的呼叫代码兼容

private new Dictionary<string, string> AttachmentNames
{
    get
    {
        /* may want to lock if multi threads is a possibility */
        if (Session["AttachmentNames"] == null)
            Session["AttachmentNames"] = new Dictionary<string, string>();

        return (Dictionary<string, string>) Session["AttachmentNames"];
    }
}
请注意,文件名是字典的键

有关词典的更多信息,请查看文档


我认为这个属性可以这样简化。此优化允许在属性中完全管理会话变量的状态,从而简化调用方代码。此代码应与您的呼叫代码兼容

private new Dictionary<string, string> AttachmentNames
{
    get
    {
        /* may want to lock if multi threads is a possibility */
        if (Session["AttachmentNames"] == null)
            Session["AttachmentNames"] = new Dictionary<string, string>();

        return (Dictionary<string, string>) Session["AttachmentNames"];
    }
}
请注意,文件名是字典的键

有关词典的更多信息,请查看文档



您在2017年使用ViewState?愿伟大的意大利面怪物怜悯你的灵魂。在这种情况下,我不会使用
ViewState
来保存数据。而是使用
会话
ViewState
与HTML一起发送,对客户端可见,它还需要可序列化,并可能导致更多流量。会话存储在服务器内存中。您是否在2017年使用ViewState?愿伟大的意大利面怪物怜悯你的灵魂。在这种情况下,我不会使用
ViewState
来保存数据。而是使用
会话
ViewState
与HTML一起发送,对客户端可见,它还需要可序列化,并可能导致更多流量。会话存储在server memory.Hi中。我已将代码更新为会话。如何将字典数据添加到Sessional,使文件大小不超过2 MB/文件,并且只存储文件名、路径。不是整个文件。但是,你在哪里保存内容呢?是请求中的,但在完成多个操作后,您将丢失它。单击“提交”按钮时,内容将被保存。我已经处理好了。我想在字典中添加文件名、文件路径(文件名、文件路径-我已经有了)并将其添加到viewstate/session,以便数据不会在postbackHi中丢失。我已将代码更新为会话。如何将字典数据添加到Sessional,使文件大小不超过2 MB/文件,并且只存储文件名、路径。不是整个文件。但是,你在哪里保存内容呢?是请求中的,但在完成多个操作后,您将丢失它。单击“提交”按钮时,内容将被保存。我已经处理好了。我想在字典中添加文件名、文件路径(文件名、文件路径-我已经有)并将其添加到viewstate/session中,以便数据不会在postbackHi中丢失。如何将字典添加到会话?Hi。谢谢上传文件时,如何将文件名、文件路径(我在字符串中有文件名、文件路径的值)添加到字典和会话中?嗨,在我提供的第一个代码块中有一个“If”块。所以在每一个if,else if中,我只需要调用AttachmentNames[fileName]=hdnatachment1.Text;如果AttachmentNames[fileName]=hdnatachment2.Text,则在else中后跟;现在会存储这两个值吗?@venkat14如果文件名不同,则会设置这两个值。如果文件名与第二次调用相同,则会覆盖第一个值。您好,如何将字典添加到会话?您好。谢谢上传文件时,如何将文件名、文件路径(我在字符串中有文件名、文件路径的值)添加到字典和会话中?嗨,在我提供的第一个代码块中有一个“If”块。所以在每一个if,else if中,我只需要调用AttachmentNames[fileName]=hdnatachment1.Text;如果AttachmentNames[fileName]=hdnatachment2.Text,则在else中后跟;现在会存储这两个值吗?@venkat14如果文件名不同,则会设置这两个值。如果文件名相同,则第二次调用将覆盖第一个值。
AttachmentNames[fileName] = hdnAttachment1.Text;