2012-03-07 8 views
0

私はコードをリファクタリングして、別のページでメソッドを利用できるようにしています。私は私にトラブルを与えている次のコードを持っています。多分、これから来るにはより良い角度がありますか?基本的に私は関数を静的にしてコードを再利用できるようにしようとしていますが、それは私の邪魔になります。リファクタリングC#、静的メソッドに変換するときにエラーメッセージがわからない

public static Table BuildProjectTable(string CRNumber) 
{ 
    LinkButton SelectLink = new LinkButton(); 
    SelectLink.ID = CRNumber + "," + ShipId + "," + StageId; 
    ProgressStatus CurrentStatus = AAGlobal.GetProgressStatus(CRNumber, ShipId, StageId); 
    SelectLink.Text = CurrentStatus.CurrentAssignee; 
    SelectLink.BackColor = CurrentStatus.CurrentStatus; 
    SelectLink.ForeColor = Color.White; 
    BodyCells[CellCount].BackColor = CurrentStatus.CurrentStatus; 
    BodyCells[CellCount].ForeColor = Color.White; 

    // This fails because SelectLink_Click isn't static (I think) 
    // 
    SelectLink.Click += new EventHandler(SelectLink_Click); 

    BodyCells[CellCount].Controls.Add(SelectLink); 

    CellCount++; 
} 


// If I make this static (fixing above error), Session, Response and lstProcess 
// all complain an object reference is required 

public void SelectLink_Click(object sender, EventArgs e) 
{ 
    LinkButton ClickedLink = (LinkButton)sender; 
    string[] ClickRef = ClickedLink.ID.ToString().Split(','); 

    Session["CR_NUMBER"] = ClickRef[0]; 
    Session["SHIP_ID"] = ClickRef[1]; 
    Session["STAGE_ID"] = ClickRef[2]; 
    Session["PROCESS_NAME"] = lstProcess.SelectedValue; 

    Response.Redirect("~/EditStage.aspx"); 
} 
+1

何がポイントですか?そのコードの平和を共有する必要がある場合は、すべてのパラメータを渡す必要があります... (私はあなたのイベントハンドラを静的にする必要はないと思います) –

+0

すべてのパラメータを渡すとはどういう意味ですか?私はこのようなイベントの処理などの概念に慣れていない、私はPHPから来た私は何をやっただろう手動でリンクを手動で生成され、ボタンのプレスからGET変数を使用して処理されます。私はポストバックをここでやる必要があります。ポストバックを行うためのリンクを生成するために私が知っている唯一の方法は、この方法です - より良い方法はありますか? – deed02392

+0

ページ内の要素を使用する必要がある場合は、メソッドを静的にしないでください。セッション、コントロール、stuff(プロパティ)は静的ではありません。各要素がフィールド/プロパティであるオブジェクトのようなページをイメージします。 ASP.NETがページを提供すると、そのオブジェクトの新しいインスタンスが作成され、そのプロパティが設定され、必要に応じてそのメソッドが呼び出されます。 LITTLE BIT(ただし、Webアプリケーションでは役に立たない)のパフォーマンスを向上させる必要がある場合は静的メソッドを使用できますが、通常はイベントハンドラなどの「通常の」メソッドでは必要ありません。 –

答えて

2

"lstProcess"とは何ですか?それは静的ですか?

そうでない場合は、あなたの問題はそれから来るかもしれませんが...

はまた、あなたがasp.net、セッション、応答、クッキーを作っていると仮定すると、...静的なものではなく、要求に依存します。これはなぜあなたがそれらにアクセスできないのかを説明します。 とにかく、EventHandlerを静的にするのは良い考えではありません。

場合によっては、Sessionと、パラメータで必要なものをすべて取得し、EventHandlerから呼び出す新しい静的メソッドを作成することを検討する必要があります。

+0

私は間違った木を吠えているかもしれませんか?新しい静的メソッドがこれを回避するためのパラメータをどのように取るかの例を教えてください。ユーザーがリンクをクリックしたときにサイトが設定する値を知っているので、その情報に基づいて新しいビューを作成できるように、イベントメソッドを使用します。 – deed02392

+0

これは解決するのが本当に簡単な問題であるようです。静的メソッドで定義されたオブジェクトにEventHandlerを割り当てるにはどうすればよいですか? – deed02392

+0

私は現在仕事中です。私は家に帰るときに編集して例を挙げます;) – delannoyk

関連する問題