- PR -

.NETのコントロールオブジェクトを引数として別のクラスのメソッドに渡したい

投稿者投稿内容
SANB
常連さん
会議室デビュー日: 2008/11/17
投稿数: 25
投稿日時: 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 ]
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-12-11 09:42
できるかどうか、ということならできそうですけどね。
例示されたプログラムだと、buttonOk_Clickメソッドの中でFileUpload1という名前の変数を定義しているのもよくわからないし、BBBのクラスがPageクラスを継承したものになっているのもよくわかりません。
具体的にどのようなことをやろうとしているのか教えてもらったほうがいいかもしれません。
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-12-11 10:43
引用:

<別クラス内のメソッド>
namespace AAA
{
public partial class BBB: System.Web.UI.Page
{
      public void ME(ref object PrmObj)
   {

        //処理
      }
}
}



ME メソッドは FileUpload クラスのみを受け取るように変更した方がいいと思います。これだと何でも渡せてしまいます。それとも、どんなクラスを渡しても正しく動く作りなんでしょうか?(サンプルコードだから単に object と書いてるだけかもしれませんが)

また、ref を使う必要があるのでしょうか?メソッド内で FileUpload オブジェクトを操作(メソッドやプロパティ呼び出し)がしたいだけなら、ref は不要だと思います。オブジェクトを完全に差し替えたいのなら別ですが・・・。
_________________
Nakamura Blog
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-12-11 11:05
どういうことがやりたいのかわかりませんが、
FileUpload.PostedFile プロパティ(HttpPostedFile 型)の中身を渡すんじゃだめでしょうか?
SANB
常連さん
会議室デビュー日: 2008/11/17
投稿数: 25
投稿日時: 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メソッドにコントロールオブジェクトを引数にして渡せば
使えると勝手に思っていたのですがこのような事はできますでしょうか?
SANB
常連さん
会議室デビュー日: 2008/11/17
投稿数: 25
投稿日時: 2008-12-11 11:35
>rain様
できるだけDLLのメソッドの方で処理をしたいのでファイルの内容だけではなくて
コントロールをそのまま参照できるような渡し方をしたいのです。
説明がわかりずらくすみません。。。
SANB
常連さん
会議室デビュー日: 2008/11/17
投稿数: 25
投稿日時: 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);
}

  }
}
}
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-12-11 12:00
えと、クラスの作り方(定義の仕方)についてまず勉強したほうがいいかも。
Pageクラスを継承する必要はまったくないと思います。
また、渡す引数の型が決まっているなら、object型じゃなくてその型そのものを使ったほうが効率がよいです。

スキルアップ/キャリアアップ(JOB@IT)