3

Panel に追加する、動的に生成された FileUpload コントロールの値を取得しようとしています。

<asp:Panel ID="pFileControls" runat="server">
</asp:Panel>

レコード セットのループ中にコントロールを作成します。

foreach(DataRow dr in ds.Tables[0].Rows)
{
    FileUpload fu = new FileUpload();
    fu.ID = dr["SomeID"].ToString();

    pFileControls.Controls.Add(fu);
}

このボタンを使用してフォームを送信するまで、すべてが正常に機能します。

<asp:Button ID="btnImportFile" runat="server" Text="Save" OnClick="btnImportFile_Click" />

私はこのように登録します(Page_Load):

ScriptManager.GetCurrent(this).RegisterPostBackControl(btnImportFile);

これを行うのは、Web サイトで MasterPage/ContentPage 設定を使用しており、ほとんどすべてが AJAXification の目的で UpdatePanel 内で行われるためです。HTML ビューで FileUpload コントロールを明示的に指定すると、100% 機能することに注意してください。

フォームが送信されると、次のように Panel を反復しようとします。

foreach (Control ctrl in pFileControls.Controls)
{
    if (ctrl.GetType() != typeof(FileUpload))
    {
        continue;
    }

    //Do the saving of the file here
}

例外として、Panel は 1 つのコントロールのみを返すように見えます: ページのコンテンツ プレース ホルダーと他には何もありません。誰かがこれについていくつかのアイデアを持っていますか?

4

1 に答える 1

1

ライフ サイクルのどの部分で動的コントロールを追加しますか?

それらを page_load に入れている場合は、手遅れかもしれません。動的コントロールの生成を page_init に入れてみて、問題が解決するかどうかを確認してください。

ページのライフサイクル http://msdn.microsoft.com/en-us/library/ms178472.aspx

動的コントロール http://geekswithblogs.net/shahed/archive/2008/06/26/123391.aspx 注:

「代わりに、Page_Init 中に動的コントロールをロードすることをお勧めします。これは、早い段階で適切なハンドラーを使用してイベントをフックする場合があるためです。... Page_Init 中に、動的コントロール (viewstate が有効) のプロパティを割り当てないでください。反映されません。」

更新パネルがあっても、動的コントロールの page_load の制限に注意する必要があると思います。

これが役立つかどうか、またはマークを逃した場合はお知らせください。

別の方法を試してみましょう (動的ファイルのアップロードが機能するようになりましたが、これは問題でした。単純にこれを使用すればよかったのにと思います) http://www.asp.net/ajaxlibrary/act_AsyncFileUpload.ashx

または http://en.fileuploadajax.subgurim.net/

これらは要素の「ループ」を作成しない場合がありますが、必要に応じてドキュメントをロードし続けることができます。

私は特に http://www.asp.net/ajaxlibrary/act_AsyncFileUpload.ashx を使用して大きな効果を上げました。

update:panel とファイルのアップロードにもいくつかの制限があるようです。これらのサイトをチェックしてください。

(これは、部分的な更新状態では機能しないと言っていますが、完全なポストバックでは機能します) http://forums.asp.net/p/1105208/1689084.aspx

送信がページ全体をトリガーしているのか、update:panel だけをトリガーしているのか知っていますか? (これをチェックしてください: http://geekswithblogs.net/mmintoff/archive/2009/04/01/fileupload-within-updatepanel.aspx

于 2010-10-15T14:09:17.837 に答える