我需要制作一个 Asp.net 控件来上传通过 Ajax 发送文件的多个文件。
此控件可用于将文件存储在文件夹或数据库中,持久性将由将使用我的控件的类决定,而不是控件本身。所以我需要在这里实现一定程度的灵活性。
上传的文件将像文件列表一样存储在我的控件类中,直到使用我的控件的类执行“官方帖子”,这将消耗然后最终释放该类。
在一个简单的示例中,使用我的控件的表单将使用通过我的控件进行的所有上传生成的列表,并在保存时,表单将读取我的列表并以最佳方式保存它。
这里的问题是方法:
我不能使用 updatePanel,因为它不允许文件输入,并且(afaik)不会保持纯 javascript 生成的输入 = 文件的状态。
不可能使用 WebMethod 属性来发送数据,因为它要求我的方法是静态的,这使得使用此方法无法提供内存中的对象。
另一种选择是使用手工制作的 Ajax,这并不难,但我不确定 Asp.net 的行为方式,它是否保持 Ajax 调用之间的状态?我可以从不同的调用访问相同的内存对象吗?我必须跟踪视图状态或使用会话吗?使用会话或视图状态(!)来保存上传的文件是否可行?
强化:问题不在于使用 ajax 上传文件,我使用的是 blueimp.github.com/jQuery-File-Upload ,问题是在服务器端跟踪它们而不持久化。
例子
让我试着更好地解释一下:
0)我有一个控件,这个控件有一个属性是文件列表 - List<files> FilesUploaded
;
1)在每次 ajax 上传时,我将即将到来的文件添加到列表中FilesUploaded.Add(FileComingFromAjax)
2)我的控件进入一个表单(任何表单),当我保存 FormBtSave.Click()
时, Form 类将需要获取文件列表并持久保存:他们像这样访问它AnyonesForm.MyControl.FilesUploaded
。请注意,文件在内存中,而不是在磁盘或数据库中。
我的疑问是,每次请求后会保留文件吗?即:
将通过ajax 调用的方法,使用Same List 吗?
当我提交主表单时,表单类是否可以使用我刚刚上传的文件访问列表?