FileUpload和UpdatePanel:ScriptManager.RegisterPostBackControl第二次工作

Van*_*nel 8 c# updatepanel file-upload asp.net-ajax

我正在使用C#和Visual Studio 2008 SP1开发ASP.NET应用程序.我正在使用WebForms.

我有一个带有两个UpdatePanel的ASPX页面,一个在左边,它包含一个TreeView,另一个在右边,我动态加载用户控件.

我在右侧面板上使用的一个用户控件具有FileUpload控件和一个用于将该文件保存在服务器上的按钮.保存控件的ascx代码是:

<asp:UpdatePanel ID="UpdatePanelBotons" runat="server" RenderMode="Inline" 
    UpdateMode="Conditional">
<ContentTemplate>
    <asp:Button ID="Save" runat="server" Text="Guardar" 
                onclick="Save_Click" CssClass="button" />
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="Save" />
    </Triggers>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

我做了一个完整的回发,将文件上传到服务器并将其保存到数据库.但我总是在FileUpload.HasFile上得到False.

我的问题是正确的UpdatePanel.我需要它动态加载用户控件.此面板有三个UpdatePanel,用于加载我使用的三个用户控件.

也许我可以使用异步文件上传器或删除正确的更新面板并执行完整回发以动态加载控件.

有什么建议?
更新:

RegisterPostBackControl 工作 ...第二次点击保存按钮.第一次FileUpload.HasFile为FALSE,第二次为TRUE.

第二次更新
第一次单击时我还检查了ScriptManager.IsInAsyncPostBack并且为FALSE.我不明白任何事!

为什么?

第一次加载用户控件的代码,以及每次回发的代码是:

DynamicControls.CreateDestination ud =
            this.LoadControl(ucUrl) as DynamicControls.CreateDestination;
if (ud != null)
{
    Button save = ud.FindControl("Save") as Button;
    if (save != null) 
        ScriptManager1.RegisterPostBackControl(save);
    PanelDestination.Controls.Add(ud);
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

小智 30

对我来说这个解决方案有效

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

第一个回发中缺少enctype属性.

http://adamnoffie.blogspot.com/2007/10/file-upload-not-working-on-first.html