我正在开发ASP.Net自定义控件。在我的控制中,我在AJAX UpdatePanel内部的MultiView内部有一个FileUpload控件。
我已将提交按钮添加到更新面板的回发触发器。 (这是使FileUpload在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>
答案 0 :(得分:2)
原来这是由部分页面更新期间呈现的FileUpload控件引起的。要正确提交,需要使用完整的回发提交和提交FileUpload控件。因为第一个表单提交导致了完整的回发,所以第二次上传开始按预期工作。
<强>解决方案:强> 添加两个显示的按钮并将文件上载控件提交到更新面板后发触发器。
例如:
<Triggers>
<asp:PostBackTrigger ControlID="btnShowUploadForm" />
<asp:PostBackTrigger ControlID="btnUpload" />
</Triggers>
答案 1 :(得分:1)
FileUpload控件是UpdatePanel不支持的控件之一。
但是还有其他几个库用于进行AJAX上传。 Telerik有一个我以前用过的好的,但它并不是免费的。虽然有一些体面的免费,但你必须尝试一些。每个都有它的优点和缺点。
答案 2 :(得分:1)
除了我的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>
答案 3 :(得分:1)
我尝试在页面加载事件中添加以下行,它在第一次及以后的时间运行。
Page.Form.Enctype =“multipart / form-data”;
在源代码中明确指定表单标记将不起作用。
答案 4 :(得分:0)
同时添加btnShowUploadForm的解决方案将否定更新面板的用途。您也可以从更新面板中删除数据访问控制(文件上载控件所在的位置)。更新面板的重点是btnShowUploadForm和取消按钮(取消上传,如果有的话),至少会导致异步后备以获得更好的用户体验。