.net 上载失败一次,然后正常工作

.net 上载失败一次,然后正常工作,.net,asp.net,ajax,file-upload,updatepanel,.net,Asp.net,Ajax,File Upload,Updatepanel,我正在使用ASP.Net自定义控件。在我的控件中,我有一个FileUpload控件,在多视图中,在AJAX UpdatePanel中 我已经将提交按钮添加到更新面板的回发触发器中。(这是使文件上传在UpdatePanel中工作的标准修复程序) 在第一次提交时,FileUpload不会上载任何内容(即,控件的FileBytes属性的长度为零)。表单上的所有其他内容都正确提交 在第二次提交和后续提交时,上载工作正常 是什么原因造成的,我该如何修复 例如: <asp:UpdatePanel r

我正在使用ASP.Net自定义控件。在我的控件中,我有一个FileUpload控件,在多视图中,在AJAX UpdatePanel中

我已经将提交按钮添加到更新面板的回发触发器中。(这是使文件上传在UpdatePanel中工作的标准修复程序)

在第一次提交时,FileUpload不会上载任何内容(即,控件的FileBytes属性的长度为零)。表单上的所有其他内容都正确提交

在第二次提交和后续提交时,上载工作正常

是什么原因造成的,我该如何修复


例如:

<asp:UpdatePanel runat="server" ID="update_panel" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:MultiView runat="server" ID="mvMultiView" ActiveViewIndex="0">
            <asp:View runat="server" ID="viewOne">
                <!-- content -->
            </asp:View>
            <asp:View runat="server" ID="viewTwo">
                <!-- some other form elements -->
                <asp:FileUpload ID="file_upload" runat="server" />
                <asp:Button ID="save_button" runat="server" Text="Save" OnClick="save_Click" ValidationGroup="group" />
            </asp:View>
         </asp:MultiView>
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="save_button" />
    </Triggers>
</ajax:UpdatePanel>

文件上载控件是UpdatePanel不支持的控件之一


不过,还有其他几个库可以进行AJAX上传。Telerik有一个不错的,我以前用过,但不是免费的。虽然有一些不错的免费的,但是你必须尝试一些。每种方法都有其优缺点。

我的代码与您的代码几乎相同,但我的UpdateMode=Conditional:

  <asp:UpdatePanel ID="upUpload" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
    <asp:RadioButton ID="rbImage" GroupName="resourceupload" Checked="true" Text="image" runat="server" />
    <asp:RadioButton ID="rbPdf" GroupName="resourceupload" Text="pdf" runat="server" />
     <asp:FileUpload ID="FileUpload1" runat="server"  Width="175"/>
    <asp:Button ID="btnUpload" runat="server" CausesValidation="false"
    Text="Upload" OnClick="btnUpload_Click" />
    <asp:Label ID="lblMsg" Visible="false" runat="server" Text=""></asp:Label>

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

这原来是由部分页面更新期间呈现的FileUpload控件引起的。要正确提交,需要使用完整的回发来呈现和提交FileUpload控件。因为第一次表单提交导致了一次完整的发帖,所以第二次上传开始按预期工作

解决方案: 添加显示文件上载控件并将其提交到更新面板回发触发器的两个按钮

例如:



同时添加btnShowUploadForm的解决方案将否定更新面板的用途。您还可以从更新面板中删除数据访问控制(fileupload控制所在的位置)。“更新”面板的重点在于btnShowUploadForm和“取消”按钮(取消上载,如果有的话),以至少导致asynchpostback以获得更好的用户体验。

我尝试在页面加载事件中添加下面的行,它在第一次和后续时间都有效

Page.Form.Enctype=“多部分/表单数据”


在源代码中明确指定表单标记将不起作用。

这不是问题所在-文件上载控件通常在更新面板中正常工作,只要提交上载的按钮导致完全回发(即,在更新面板中作为回发触发器触发)。我以前多次使用过这种技术,但是在这一次中,它在第一次提交时不能正常工作,但在随后的提交中可以正常工作手动触发的更新此问题仍然存在-我认为此问题是由其他原因引起的。如何添加FileUpload控件中内置的按钮?
   <Triggers>
      <asp:PostBackTrigger ControlID="btnShowUploadForm" />
      <asp:PostBackTrigger ControlID="btnUpload" />
   </Triggers>