无法将类型为'System.String'的对象强制转换为'System.Collections.Generic.List`1 [System.String]'

时间:2014-02-15 11:29:02

标签: c# asp.net

protected void File_Upload(object sender, AjaxFileUploadEventArgs e)
{   
    List<String> pathlist = null;
    if (Session["UploadedPath"] != null)
    {
        pathlist = (List<String>)Session["UploadedPath"];
    }
    else
    {
        pathlist = new List<string>();
    }
    string filename = e.FileName;
    string path = "~/Documents/" + filename;
    this.AjaxFileUpload1.SaveAs(Server.MapPath(path));
    pathlist.Add(path);
    Session["UploadedPath"] = pathlist;
}

我收到这样的错误

无法将System.String类型的对象转换为System.Collections.Generic.List1[System.String].

类型

如何将多个上传的文件保存到数据库

2 个答案:

答案 0 :(得分:0)

我认为您的UploadedPath变量是string,而不是List<string>,因此您无法执行以下演员

pathlist = (List<String>)Session["UploadedPath"];

您需要确保在设置UploadedPath时,肯定是 List<string>而不是string的实例。

答案 1 :(得分:0)

你确定'Session [“UploadedPath”];'包含列表类型值?我认为它包含一个字符串值。

pathlist = (List<String>)Session["UploadedPath"]; 

将返回上述异常。

请重新检查您在“UploadedPath”会话中存储的值,并确保其列表类型

希望以下代码能为您提供帮助。但请确保在Session [“UploadedPath”]中保存了一些内容;之前,请确保它是List类型。

我不熟悉AjaxFileUpload,如果'e'一次只包含一个文件,下面的方法就可以了。但如果它包含多个文件,则必须循环遍历它并将每个文件添加到“路径列表”,然后将其保存到会话

protected void File_Upload(object sender, AjaxFileUploadEventArgs e)
{   
    List<String> pathlist =  new List<String>();

    if (Session["UploadedPath"] != null)
    {
       pathlist = (List<String>)Session["UploadedPath"];
    }

    string filename = e.FileName;
    string path = "~/Documents/" + filename;
    this.AjaxFileUpload1.SaveAs(Server.MapPath(path));
    pathlist.Add(path);
    Session["UploadedPath"] = pathlist;
}