- - PR -
[ASP.NET]ファイルアップロード機能のクラス化
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-02-03 14:08
お疲れさまです
クライアントローカルファイルをサーバーへアップロードする処理をクラス化したく、下記のようなコーディングをしました。しかし実行時に「オブジェクト参照がオブジェクトインスタンスに設定されていません」とエラーが発生してしまいます。 デバッグすると、「pf.PostedFile」がNullとなってしまいます クラス上ではHtmlコントロールの操作はできないのでしょうか? コード抜粋(WebForm、Class) ’WebForm1(ボタン:cmd1 とHtmlInputFile:pfを配置) Private clsPostFile as Class1 = New Class1 'ボタンクリック clsPostFile. m_pvstrFileNM = pf.PostedFile.FileName ’選択したファイル名 clsPostFile.pf_PostFile() ’Class1の関数 pf_PostFile ’Class1 Inherits System.Web.UI.Page Public m_pvstrFileNM as String Public Function pf_PostFile() Dim pf = New HtmlInputFile pf.ID = "1" pf.PostedFile.SaveAs(m_pvstrFileNM) End Function 環境:VisualStudio.Net2003 + Windows2000 + IIS5.0 | ||||
|
投稿日時: 2005-02-03 14:31
こんにちは。
クラス上で扱えないことはないですが、この場合クラスでわざわざ生成する必要はないです。 そもそも、エラーになっている理由が、クラス側で生成したHtmlInputFileインスタンスのPostedFileプロパティに何も入っていないからです。(フォーム側のコードに記述されているpfとは別物なので) クラスに渡すのは、ファイル名ではなく、PostedFile(HttpPostedFileクラス)を渡してはどうでしょうか? | ||||
|
投稿日時: 2005-02-03 14:33
お疲れさまです。
あの、「クラス化」する意味がよく分からないのですが… 部品化したいということなら、普通こうゆう場合、ユーザーコントロールを使うのでは? | ||||
|
投稿日時: 2005-02-03 15:28
お疲れさまです
nodera様のご指摘の通りHtmlInputFileを渡す事で解決いたしました 修正コード コード抜粋(WebForm、Class) ’WebForm1(ボタン:cmd1 とHtmlInputFile:pfを配置) Private clsPostFile as Class1 = New Class1 'ボタンクリック clsPostFile. m_pvctrPF = pf ’HtmlInputFileコントロール clsPostFile.pf_PostFile() ’Class1の関数 pf_PostFile ’Class1 Inherits System.Web.UI.Page Public m_pvctrPF = HtmlInputFile Public Function pf_PostFile() pf.PostedFile.SaveAs("C:?AAA.txt") End Function クラス化したいという意図は 1、実ファイルをアップロード(またはファイル削除) 2、Oracle 履歴テーブルを更新(ストアドプロシージャで処理) という処理が複数フォームから呼び出される「共通処理」で、 1および2の処理とも引数が同じ値なのでクラス化を考えました。 以上 | ||||
|
投稿日時: 2005-02-03 15:49
それならば1と2の処理だけ抜き出してクラス化した方がいいですよ。 処理の共通化のためにSystem.Web.UI.Pageクラスを継承して画面ごとクラス化するのは、 MVC的な観点からあまりお薦めできません。 | ||||
|
投稿日時: 2005-02-03 16:03
ご指摘ありがとうございます MVCの観点に沿ったクラス設計、心がけたいと思います |
1