【问题标题】:FileUpload is not working within update panelFileUpload 在更新面板中不起作用
【发布时间】:2010-10-17 07:05:52
【问题描述】:

所以我想做的是让用户选择要上传的文件。由于我只接受图像,我将测试扩展。我还想将文件大小限制在 2mb 以下,所以我将对其进行测试(尚未在代码中实现)。如果他们选择的文件通过,那么我希望标签显示“文件已接受”,并存储文件上传信息以供稍后单击按钮。一旦用户填写完表格的其余部分,就会发生这种情况。最后,我将在页面上放置一个 UpdateProgress 控件,同时检查文件是否被允许。我宁愿不为此发回它,所以如果我能让它工作,那就太好了。顺便说一句,如果我将标签从更新面板中取出,这一切都会正常工作。

当我运行它时会发生什么,它会转到第一个 if 的 else 语句并返回“请选择一个文件”。这意味着 FileUpload1.HasFile 返回 false。我可以看到发生这种情况的唯一原因是因为 UpdatePanel 无法从 FileUpload 控件访问该信息?

代码背后:

    Label SubmitButtonLabel2= (Label)UpdatePanel1.FindControl("SubmitButtonLabel");
    if (FileUpload1.HasFile)
    {
        string[] fileName = FileUpload1.FileName.Split('.');
        if ((fileName[fileName.Length - 1] == "jpg") ||
            (fileName[fileName.Length - 1] == "gif") ||
            (fileName[fileName.Length - 1] == "bmp") ||
            (fileName[fileName.Length - 1] == "jpeg") ||
            (fileName[fileName.Length - 1] == "png"))
        {
            SubmitButtonLabel2.Text = "File Accepted.";
        }
        else
        {
            SubmitButtonLabel2.Text = "File type not allowed.  Please choose another.";
        }
    }
    else
    {
        SubmitButtonLabel.Text = "Please select a file.";
    }

页面:

<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:Button ID="SubmitButton" runat="server" Text="Submit File" OnClick=SubmitButton_Click />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="always">
            <ContentTemplate>
                <asp:Label ID="SubmitButtonLabel" runat="Server" />
            </ContentTemplate>
            <Triggers>
                <asp:PostBackTrigger ControlID="SubmitButton" />
            </Triggers>
        </asp:UpdatePanel>

    </div>
</form>
</body>

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    无需做任何事情,您只需在表单中添加多部分数据属性即可。

    Page.Form.Attributes.Add("enctype", "multipart/form-data");

    查看以下链接了解更多详情。

    http://knowledgebaseworld.blogspot.com/2009/02/file-upload-not-working-with-update.html

    【讨论】:

      【解决方案2】:
      <Triggers>
        <asp:PostBackTrigger ControlID="YourControlID" />
      </Triggers>
      

      UpdatePanel 添加触发器并提供ControlID。如果您使用的是TabContainer,请使用选项卡容器的 ID。

      【讨论】:

      【解决方案3】:

      将此行添加到您的page_load

      ScriptManager.GetCurrent(this).RegisterPostBackControl(this.Button);
      

      【讨论】:

      • 太棒了!!!!非常感谢!!!!我使用“Page”而不是“this”:ScriptManager.GetCurrent(Page).RegisterPostBackControl(this.Button);
      【解决方案4】:

      如果您在更新面板中使用 FileUpload 控件,您必须为您编写代码以保存上传文件的按钮设置 PostbackTrigger。

      现在下面的代码我有 btnSave 按钮,用于将文件保存在上传文件夹中。所以我为它设置了回发触发器。

      <Triggers>
                  <asp:PostBackTrigger ControlID="btnSave" />
      </Triggers>
      

      希望这会对你有所帮助。

      【讨论】:

        【解决方案5】:

        默认的 asp.net FileUpload 控件永远不会与 UpdatePanel 一起使用。您需要 AjaxControl Toolkit 中定义的特殊 AsyncFileUpload 控件。这个

        http://www.asp.net/ajax/ajaxcontroltoolkit/samples/AsyncFileUpload/AsyncFileUpload.aspx

        alt text http://ruchitsurati.net/files/fileupload.png

         <ajaxToolkit:AsyncFileUpload OnClientUploadError="uploadError"
             OnClientUploadComplete="uploadComplete" runat="server"
             ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern"
             UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" /> 
        

        【讨论】:

          【解决方案6】:

          不要忘记更改表单的类型,以允许文件上传(enctype 或类似的东西,我不在 Visual Studio 前面,所以不能那么精确。)

          我遇到了同样的问题。

          【讨论】:

          • 这仍然无济于事。在没有解决方法的情况下,在更新面板中使用 fileUpload 的功能被禁用。
          【解决方案7】:

          制作上传文件的按钮作为上传面板的触发器 像这样的,

           <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
          <ContentTemplate>
          <asp:Panel ID="pnlUploadImage" runat="server">
           <asp:FileUpload ID="fuldImage" runat="server"></asp:FileUpload>
          
          
                 <asp:LinkButton ID="lnkbUpload" runat="server" onclick="lnkbUpload_Click">Add</asp:LinkButton>
          </asp:Panel>
          
          
          
          </ContentTemplate>
          <Triggers>
          <asp:PostBackTrigger   ControlID="lnkbUpload"/></Triggers>
          </asp:UpdatePanel>
          

          【讨论】:

            【解决方案8】:

            在使用了此处发布的两个解决方案后,我得到了它。

            我必须同时添加两个

            Page.Form.Attributes.Add("enctype", "multipart/form-data");
            

            在 Page_Load 以及

            <Triggers>
                <asp:PostBackTrigger ControlID="btnUpload" />
            </Triggers>
            

            在更新面板的标记上。

            【讨论】:

              【解决方案9】:

              Page.Form.Attributes.Add("enctype", "multipart/form-data");

              这样做会解决你的问题。

              请参阅this article

              【讨论】:

                【解决方案10】:

                You're answer can be found here

                由于 javascript 和浏览器安全原因,默认情况下基本上是不允许的。但这是一种解决方法。

                【讨论】:

                  【解决方案11】:

                  我的猜测是 HasFile 只会在帖子完成后才会被填充,而不是在那之前。

                  您可能想在帖子完成之前检查 FileUpload1.FileName 是否已经填写,但我有点怀疑。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2011-06-11
                    • 2014-07-30
                    • 2017-01-31
                    • 2010-10-13
                    • 2011-11-07
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多