在ASP.NET中创建用于文件上载的Ajax,同时跟踪内存中的文件

时间:2013-02-22 17:59:22

标签: asp.net ajax updatepanel viewstate

我需要制作一个Asp.net控件来上传通过Ajax发送文件的多个文件。

此控件可用于将文件存储在文件夹或数据库中,持久性将由将使用我的控件的类决定,而不是由控件本身决定。所以我需要在这里达到一定程度的灵活性。

上传的文件将像Control List一样存储在Control Class中,直到使用我的控件的类执行"官方帖子"这将消耗,然后最终释放该类。

在一个简单的示例中,使用我的控件的Form将使用通过我的控件和upong保存所生成的所有上传生成的List,该表单将读取我的列表并以最佳方式保留它。

这里的问题是方法:

我无法使用updatePanel,因为它不允许文件输入,并且(afaik)不会保持纯粹javascript生成的输入=文件的状态。

无法使用WebMethod属性发送数据,因为它要求我的方法是静态的,因此无法使用此方法提供内存对象。

另一种选择是使用手工制作的Ajax,这并不困难,但我不确定Asp.net的行为方式,是否在Ajax Calls之间保持状态?我可以从不同的调用中访问内存对象中的相同内容吗?我是否必须跟踪视图状态或使用会话?是否可以使用会话或viewstate(!)来保存上传的文件?

执行:问题是使用ajax上传文件,我使用blueimp.github.com/jQuery-File-Upload,问题是在服务器端跟踪它们而不会持续存在。

示例

让我试着解释一下:

0)我有一个控件,这个控件有一个属性是文件列表 - List<files> FilesUploaded;

1)在每次ajax上传中,我将即将发布的文件添加到列表FilesUploaded.Add(FileComingFromAjax)

2)我的控件进入一个表单(任何形式),当我保存表单BtSave.Click()时,Form类需要获取文件列表并保持这样:他们像这样访问它{{ 1}}。请注意,这些文件位于内存中,而不在磁盘或数据库中。

我的疑问是,每次请求后都会保留文件吗? namelly:

方法是否会通过ajax调用,使用相同的列表?

当我提交主表单时,表单类是否可以使用我刚刚上传的文件访问列表?

2 个答案:

答案 0 :(得分:2)

实际上,我认为asp.net能够在ajax请求之间保留对象,但实际情况并非如此。

我将使用会话,我不怕再向会话添加对象,ASP.net, adding objects to a session variable

答案 1 :(得分:1)

像这样结合jQuery和AJAX:

jQuery Ajax File Upload

How can I upload files asynchronously?

实现你的结果。