FileUpload и UpdatePanel: ScriptManager.RegisterPostBackControl работает во второй раз

Я разрабатываю приложение ASP.NET с C # и Visual Studio 2008 SP1. Я использую WebForms.

У меня есть страница ASPX с двумя UpdatePanels, одна слева, которая содержит 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>

Я делаю полный постбэк, чтобы загрузить файл на сервер и сохранить его в базе данных. Но я всегда заводил False на FileUpload.HasFile.

У меня проблема с правильным UpdatePanel. Мне нужно, чтобы динамически загружать пользовательские элементы управления. Эта панель имеет три UpdatePanels для загрузки трех пользовательских элементов управления, которые я использую.

Может быть, я могу использовать Async File Uploader или удалить нужную панель обновлений и выполнить полную обратную передачу для динамической загрузки элементов управления.

Любой совет?
ОБНОВИТЬ:

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);
}

Спасибо.

Ответы на вопрос(6)

Ваш ответ на вопрос