2009-05-20 85 views
1

我在运行时创建了FileUpload控件。当我单击LinkButton时,会生成一个新的FileUpload控件。维护用于FileUpload控件的ViewState

现在假设我从FileUpload控件中选择了一个文件,然后单击LinkButton。之前的FileUpload控制失败了。不过,我坚持认为我用这条线在运行时创建每个控件的ViewState的:

f1.enableviewstate = true; 

如何维护一个FileUpload控制所选择的文件?

回答

0
  1. 想想看,如果你真的需要在运行时呢?
  2. 如果你真的需要在运行时;不要忘记将它添加到最近的容器的Controls属性。这样做可以确保它的状态被序列化为ViewState

希望这有助于...

1

你不能预先选择的文件上传输入标签的文件路径(安全相关 - 用户必须选择文件),所以.NET是无法从viewstate填充值。

2

步骤

  1. 用户选择文件
  2. 用户点击LinkBut​​ton的(问题,增加了额外的文件上传控件的回发)
  3. 服务器端应该得到上回发的文件,并存储在某个地方(任何地方)
  4. 替换第一个<input type=file>类似标签和复选标记图标(告诉用户该文件已被上传(或者甚至是禁用的只读文本框浏览按钮来伪造文件上传控制 - 但是你将无法显示正确的文件路径)
  5. 用户呈现一个新的窗体,显示已经上传的文件中新的空文件上传控制。

出于安全原因,您无法以任何形式或形式操纵<input type=file>

哈克方法
如果我明白你正确地你的链接按钮,增加了额外的文件上传控件到你的页面。相反,我会在第一次创建足够数量的上传控件并显示一个。其他人会被CSS隐藏。用户单击LinkBut​​ton后,它将只具有客户端Javascript功能,可以显示其他控件。另一个...和另一个...和另一个...直到达到最大值。

复杂的方法
你可以通过但使用更多的JavaScript使之以不同的方式,使之更加的Web 2.0十岁上下。但是,您应该通过

2

上传这些文件,因为其他一些人提到过,由于安全问题,无法保留FileUpload的视图状态。 你可以做的只是简单地在FileUpload下面添加一个Label。当用户点击链接按钮以生成新的FileUpload时,将会触发回传,您可以检查页面上的FileUpload控件是否具有某些值(即用户已选择要上载的文件),如果是,您可以直接开始上传该文件并在标签上显示结果(路径或文件名),只是用户知道他已经添加了该文件。您还可以隐藏文件上传并添加删除链接,以再次删除上传的文件(与Gmail类似)。

希望这有助于。

树里

+0

我也在想这个方法....我觉得现在应该使用这个。 – 2009-05-20 11:18:04

0

按照我也没办法坚持文件上传的视图状态中asps.net。

ü可以存储它的隐藏字段的值,会话等文件 - 可以不能够分配该值再次文件上传,因为它是只读