Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文件名添加到列表<;字符串>;_C#_Jquery_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 将文件名添加到列表<;字符串>;

C# 将文件名添加到列表<;字符串>;,c#,jquery,asp.net,asp.net-mvc,C#,Jquery,Asp.net,Asp.net Mvc,我正在使用Asp.NETMVC和C#开发一个web应用程序。用户可以通过jqueryajax上传文件。我试图做的是将用户上传的每个文件名添加到列表中。为此,我有以下代码: public class FileUploadController : Controller { private List<string> UploadedFileNames = new List<string>(); public List<string> AddFile

我正在使用Asp.NETMVC和C#开发一个web应用程序。用户可以通过
jqueryajax
上传文件。我试图做的是将用户上传的每个文件名添加到
列表中。为此,我有以下代码:

public class FileUploadController : Controller
{
    private List<string> UploadedFileNames = new List<string>();

    public List<string> AddFileNameToList(string fileName)
    {
        UploadedFileNames.Add(fileName);

        return UploadedFileNames;
    }

    public JsonResult UploadFile(string fileName)
    {

        //save file to directory etc

        AddFileNameToList(fileName);

        return Json(new {});//relevant info for the user
    }
}
公共类FileUploadController:控制器
{
私有列表UploadedFileNames=新列表();
公共列表AddFileNameToList(字符串文件名)
{
上传文件名。添加(文件名);
返回上传的文件名;
}
公共JsonResult上载文件(字符串文件名)
{
//将文件保存到目录等
AddFileNameToList(文件名);
返回Json(new{});//用户的相关信息
}
}
使用上面的代码,每次我上传一个文件并将文件名添加到
UploadedFileNames
中时,上一个计数总是0,而不是包含所有上一个文件名的all


有人能告诉我如何做到这一点吗

为每个请求创建一个新的控制器实例。因此,您的列表是每个请求的一个新实例。您需要将此列表保存到其他位置

如果您只需要了解用户在站点上的时间段的信息,则可以使用会话


然而,当它上传文件时,我怀疑您可能希望更长期地存储信息,以便返回的用户可以看到他们上传的内容。在这种情况下,每次请求时都会将信息保存到数据库。

问题可能是每次用户尝试上载文件时,FileuploadController类都会初始化,因此每次上载时,
UploadedFilenames
list将重置为空list,将上载的文件名设置为静态,以防止出现这种情况。

您可以使用类似以下代码将列表添加到会话中:

if (Session["UploadedFileNames"] != null)
{
    Session["UploadedFileNames"] = new List<string>() { fileName };           
}
else
{
    var list = (Session["UploadedFileNames"] as List<string>);
    list.Add(fileName);
    Session["UploadedFileNames"] = list;
}
if(会话[“UploadedFileNames”]!=null)
{
会话[“UploadedFileNames”]=新列表(){fileName};
}
其他的
{
var list=(会话[“UploadedFileNames”]作为列表);
添加(文件名);
会话[“UploadedFileNames”]=列表;
}

MVC控制器实例
FileUploadController
(以及任何其他控制器实例)的寿命非常短。每个请求只使用一次实例,列表在其中无法生存。您需要像会话一样将列表存储在某个位置。您每次都要创建一个新列表,在会话中保存它,并检查会话中是否存在列表,使用该列表,否则创建一个。@thmshd如果您能提供一个示例,是否可能please@Code如果根据每个用户保存文件,创建一个服务,在需要时检索列表。@代码是,但这是您应该在Internet上很容易找到的。但是要开始使用它
static
会带来一大堆其他问题,其中最重要的一点是,它会变得不安全,请不要这样做。我们讨论的是一个Web应用程序,我怀疑您是否希望所有用户都管理同一个列表