维护FileUpload控件的ViewState

时间:2009-05-20 10:19:00

标签: asp.net file-upload webforms viewstate

我在运行时创建FileUpload控件。当我点击LinkButton时,会生成一个新的FileUpload控件。

现在假设我从FileUpload控件中选择了一个文件,然后点击LinkButton。之前的FileUpload控件失去了它的路径。但是,我正在维护我在运行时使用以下行创建的每个控件的ViewState:

f1.enableviewstate = true;

如何维护FileUpload控件的选定文件?

5 个答案:

答案 0 :(得分:2)

步骤

  1. 用户选择文件
  2. 用户单击LinkBut​​ton(发出添加其他文件上传控件的回发)
  3. 服务器端应该在回发时获取文件并将其存储在某个地方(任何地方)
  4. 用标签和复选标记图标替换第一个<input type=file>(告诉用户文件已经上传(或者甚至是已禁用浏览按钮的只读文本框)文件上传控制 - 但是你将无法在其中显示正确的文件路径)
  5. 向用户显示一个新表单,该表单在显示已上传的文件时具有新的空文件上传控制。
  6. 出于安全原因,您无法以任何形式或形式操纵<input type=file>

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

    复杂方法
    但是,你可以通过使用更多的Javascript以更多的Web 2.0-ish以不同的方式实现它。但是,您应该通过<iframe>

    上传这些文件

答案 1 :(得分:2)

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

希望这会有所帮助。

树里

答案 2 :(得分:1)

您无法在文件上传输入标记中预先选择文件路径(安全相关 - 用户必须选择文件),因此.Net无法从viewstate填充值

答案 3 :(得分:0)

按照我的说法,没有办法在asps.net中保存fileupload的viewstate。

你可以将它的值存储在隐藏字段,会话等文件中你无法将该值分配给再次文件上传,因为它是只读的

答案 4 :(得分:0)

  1. 考虑一下你是否真的需要在运行时使用它?
  2. 如果你真的需要在运行时;不要忘记将其添加到最近的容器的Controls属性中。这样做可确保其状态序列化为ViewState
  3. 希望这会有所帮助......