asp.Net   发布时间:2022-04-05  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net – 在更新面板中自动上传文件到服务器第一次不起作用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
要求

我正在尝试上传一个文件,一旦用户选择它。我必须满足以下要求:

>按钮看起来像应用程序中的其他按钮。
>一旦用户选择该文件就上传文件。
>我需要它在updatePanel,因为我必须对页面进行条件更新。我可以对所选文件(a.k.a onchangE)事件进行完整的回发。

当前代码

以下是我的视图文件的外观:

<asp:updatePanel ID="updata" updateMode="Conditional" runat="server">
    <ContentTemplate>

    <div style="width: auto; float: right;">

    <asp:Button ID="btnFileImportSkin" CssClass="ButtonSkin AddButton" Text="Import" Style="position: absolute; z-index: 2;" runat="server" OnClientClick="Javascript:onImport(); return false;" />
    <asp:FileUpload ID="fileImport" Visible="false" Style="position:relative; opacity:0;" runat="server" onchange="Javascript:onFileSELEcted();"  /> 
           <%-- onchange="Javascript:this.form.submit();" /> --%>
           <%-- <asp:Button ID="btnUpload" runat="server" OnClientClick="Javascript:alert('Uploading...'); __dopostBACk('<%= btnUpload.ID %>',''); return false;" /> --%>
    <asp:Button ID="btnUpload" OnClick="btnUpload_Click" runat="server" />
    </div>

    </ContentTemplate>
    <@R_801_10296@gers>
        <asp:PostBACk@R_801_10296@ger ControlID="btnUpload" />
    </@R_801_10296@gers>
</asp:updatePanel>

相关Javascript:

<script type="text/javascript">
    function onImport() {
        var fileImportClientId = '<%= fileImport.ClientID %>';
        document.getElementById(fileImportClientId).click();
    }

    function onFileSELEcted() {
        alert("File SELEcted");
        // I have tried calling the function directly and with a timeout
        setTimeout(onUpload,20);
    }

    function onUpload() {
        var btnUploadClientId = '<%= btnUpload.ClientID %>';
        document.getElementById(btnUploadClientId).click();
    }
</script>

代码背后:

protected void btnUpload_Click(object sender,EventArgs E)
{
    // PostedFile is null first time code gets here on user SELEcTing a file
    if (fileImport.PostedFile != null)
    {
        if (fileImport.PostedFile.Filename.Length > 0)
        {
            ImportFromFile();
        }
    }
}

说明/流量

>用户点击btnFileImportSkin按钮。
>调用函数onImport,以编程方式点击fileimport按钮。
>用户选择一个文件,然后按打开。
> onFileSELEcted被调用。
> onUpload被成功调用
> btnUpload_Click每次都被成功调用

但问题是这个

fileImport.PostedFile在第一次用户选择文件时为空。@R_655_6944@,第二次和从那里。

有关

This question与我的问题密切相关,但OP可能需要像Gmail一样的Async上传解决方案。我已经尝试过如下这个问题的答案:

> __dopostBACk()在btnUpload的OnClientClick事件中
> this.form.submit()onchange事件我的FileUpload控件。
>在Page_PreRender中设置FileUpload控件的onchange属性

补充笔记

>当我没有更新面板时,这个东西很好。我正在使用this.form.submit()直接在FileUpload控件的onchange事件中。
>目标框架是.NET 4.0

注意:在上面的FileUpload控件中添加了Visible =“false”。这是问题,但我在提问时忽视了这个问题。

解决方法

此代码适用于我,同时定位.Net 4.5和4.0框架版本。我将您的代码复制/粘贴到一个新的Web窗体应用程序中,在这两种情况下,fileImport.PostedFile不为空,但包含我选择的图像流。

您网页上的任何其他标记是否有问题?或者您的页面生命周期?您在用户控件或Web表单页面上发布的HTML / JavaScript?

大佬总结

以上是大佬教程为你收集整理的asp.net – 在更新面板中自动上传文件到服务器第一次不起作用全部内容,希望文章能够帮你解决asp.net – 在更新面板中自动上传文件到服务器第一次不起作用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。