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

omhiaaxx  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(650)
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].类型
如何将多个上传的文件保存到数据库中

kqlmhetl

kqlmhetl1#

在我看来,您的UploadedPath变量是string,而不是List<string>,因此无法执行以下类型转换

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

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

w41d8nur

w41d8nur2#

是否确定“会话[“上载路径”];'包含列表类型值?。我认为它包含字符串值。

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

会传回上述例外状况。
请重新检查存储在“UploadedPath”会话中的值,并确保其为列表类型
希望下面的代码能对你有所帮助。但是要确保你在Session[“UploadedPath”]中保存了一些东西;之前,请确保它是List类型。
我不熟悉AjaxFileUpload,如果“e”一次只包含一个文件,下面的方法就可以了。但是如果它包含多个文件,你必须循环遍历它,并将每个文件添加到“pathlist”中,然后将其保存到会话中

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;
}

相关问题