- - PR -
.NETのコントロールオブジェクトを引数として別のクラスのメソッドに渡したい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-12-10 19:09
お世話になっております。
C#.NET2.0でWEBアプリを作成しております。 処理としてはローカルのファイルパスを実行ボタンを押したときに 「Upload.aspx」のFileUploadコントロールオブジェクト自体を引数として 別クラスのメソッドに渡したいのですができますでしょうか? まずできるかどうかを知りたいです。 ちなみに以下ではできなかったのですが・・・ 引数を一個指定できるメッソド「ME」のオーバーロードはありません。 というエラーになってしまいました。。。 よろしくお願いいたします。 <Upload.aspx> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button runat="server" ID="buttonOk" Text="実行" OnClick="buttonOk_Click" /> <Upload.cs> protected void buttonOk_Click(object sender, EventArgs e) { object FileUpload1; AAA.BBB c = new AAA.BBB(); c.ME(ref FileUpload1); } <別クラス内のメソッド> namespace AAA { public partial class BBB: System.Web.UI.Page { public void ME(ref object PrmObj) { //処理 } } } [ メッセージ編集済み 編集者: SANB 編集日時 2008-12-10 19:35 ] | ||||
|
投稿日時: 2008-12-11 09:42
できるかどうか、ということならできそうですけどね。
例示されたプログラムだと、buttonOk_Clickメソッドの中でFileUpload1という名前の変数を定義しているのもよくわからないし、BBBのクラスがPageクラスを継承したものになっているのもよくわかりません。 具体的にどのようなことをやろうとしているのか教えてもらったほうがいいかもしれません。 | ||||
|
投稿日時: 2008-12-11 10:43
ME メソッドは FileUpload クラスのみを受け取るように変更した方がいいと思います。これだと何でも渡せてしまいます。それとも、どんなクラスを渡しても正しく動く作りなんでしょうか?(サンプルコードだから単に object と書いてるだけかもしれませんが) また、ref を使う必要があるのでしょうか?メソッド内で FileUpload オブジェクトを操作(メソッドやプロパティ呼び出し)がしたいだけなら、ref は不要だと思います。オブジェクトを完全に差し替えたいのなら別ですが・・・。 _________________ Nakamura Blog | ||||
|
投稿日時: 2008-12-11 11:05
どういうことがやりたいのかわかりませんが、
FileUpload.PostedFile プロパティ(HttpPostedFile 型)の中身を渡すんじゃだめでしょうか? | ||||
|
投稿日時: 2008-12-11 11:23
説明に不備がすみません。
まずやりたい事はファイルをサーバーにアップロードしたいという事です。 で、今までクラスの呼び出しは行わずに同アプリで動かしていたアプリを 画面と内部の処理は別にして内部の処理のみDLLのメソッドとして分けました。 今までは簡略化してあるのですが以下で動いていました。 <Upload.aspx> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button runat="server" ID="buttonOk" Text="実行" OnClick="buttonOk_Click" /> <Upload.cs> protected void buttonOk_Click(object sender, EventArgs e) { string savePath = Request.PhysicalApplicationPath + @"\TmpFile\"; FileUpload1.SaveAs(savePath); } それをUpload.csを別DLLのMEメソッドとして分けてFileUpload コントロールだけ aspxの画面につければMEメソッドにコントロールオブジェクトを引数にして渡せば 使えると勝手に思っていたのですがこのような事はできますでしょうか? | ||||
|
投稿日時: 2008-12-11 11:35
>rain様
できるだけDLLのメソッドの方で処理をしたいのでファイルの内容だけではなくて コントロールをそのまま参照できるような渡し方をしたいのです。 説明がわかりずらくすみません。。。 | ||||
|
投稿日時: 2008-12-11 11:44
>なかむら様
その辺のやりかたがよくわからなくて、 処理内容としてはまずファイルがあるかどうかを判定してあればアップロード というような感じにしたいので、オブジェクトの操作のみできれば大丈夫です。 以下の感じでよろしいでしょうか? <別クラス内のメソッド> namespace AAA { public partial class BBB: System.Web.UI.Page { public void ME(object FileUpload1) { //処理 if (FileUpload1.HasFile) { string savePath = Request.PhysicalApplicationPath + @"\TmpFile\"; FileUpload1.SaveAs(savePath); } } } } | ||||
|
投稿日時: 2008-12-11 12:00
えと、クラスの作り方(定義の仕方)についてまず勉強したほうがいいかも。
Pageクラスを継承する必要はまったくないと思います。 また、渡す引数の型が決まっているなら、object型じゃなくてその型そのものを使ったほうが効率がよいです。 |