私はコードをリファクタリングして、別のページでメソッドを利用できるようにしています。私は私にトラブルを与えている次のコードを持っています。多分、これから来るにはより良い角度がありますか?基本的に私は関数を静的にしてコードを再利用できるようにしようとしていますが、それは私の邪魔になります。リファクタリング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");
}
何がポイントですか?そのコードの平和を共有する必要がある場合は、すべてのパラメータを渡す必要があります... (私はあなたのイベントハンドラを静的にする必要はないと思います) –
すべてのパラメータを渡すとはどういう意味ですか?私はこのようなイベントの処理などの概念に慣れていない、私はPHPから来た私は何をやっただろう手動でリンクを手動で生成され、ボタンのプレスからGET変数を使用して処理されます。私はポストバックをここでやる必要があります。ポストバックを行うためのリンクを生成するために私が知っている唯一の方法は、この方法です - より良い方法はありますか? – deed02392
ページ内の要素を使用する必要がある場合は、メソッドを静的にしないでください。セッション、コントロール、stuff(プロパティ)は静的ではありません。各要素がフィールド/プロパティであるオブジェクトのようなページをイメージします。 ASP.NETがページを提供すると、そのオブジェクトの新しいインスタンスが作成され、そのプロパティが設定され、必要に応じてそのメソッドが呼び出されます。 LITTLE BIT(ただし、Webアプリケーションでは役に立たない)のパフォーマンスを向上させる必要がある場合は静的メソッドを使用できますが、通常はイベントハンドラなどの「通常の」メソッドでは必要ありません。 –