資産管理システムで異なるタスクを実行する 2 つの完全に機能するページがあります。1 つは、グリッドビューを使用してシリアル番号付きのアセットのリストをページに表示することです。そのビューで、シリアル番号をクリックできるようにして、特定のアセット情報を実際に表示する別のページを開きます。リンクをクリック可能にし、シリアル番号をクエリ文字列として渡して他のページを開く方法を見つけました。問題は、他のページがロードされるときです。そのシリアル番号を一度だけ処理したい - 処理後、ページの入力ボックスを使用してシリアル番号を表示する必要があります。これまでのところ、クエリ文字列を読み取ってセッション変数として保存し、クエリ文字列なしでページ自体にリダイレクトするようにページを取得しました。問題はリダイレクトにあります。Page_Load イベントを再処理していないようです。リダイレクトの前に設定したセッション変数を読み取ります。リフレッシュを押すと、魔法のように機能し、そのシリアル番号のデータが表示されるため、設定されていることがわかります。しかし、なぜ更新を押さなければならないのでしょうか? 私の Page_Load イベントは、これら 2 つを順番に呼び出します。最初のクエリ文字列をセッションにコピーし、リダイレクトします。2 番目は、セッション変数を処理し、検索ボタンと同じイベント ハンドラーを実行します。
protected void GetSearchQueryString(object sender, EventArgs e)
{
String s = Request.QueryString["SN"];
if (s != null && s.Length > 0)
{
Session["SN"] = s;
Response.Redirect("/AssetManagement.aspx");
}
}
protected void GetSearchSessionVar(object sender, EventArgs e)
{
if (Session["SN"] != null)
{
string sessionVal = Session["SN"].ToString();
AssetSearchTextBox.Text = sessionVal; //setting serial number
Session.Remove("SN");
AssetSearchButton_Click(sender, e); //Running asset search
}
}
//################################################ ##### これは、rs のコメントと mashupweb の回答に触発されて作成した作業コードです。ポストバックをチェックし、クエリ文字列としてそのままにしておくだけで機能します。醜い URL は嫌いですが、それでも対処できます。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
String s = Request.QueryString["SN"];
if (s != null && s.Length > 0)
{
AssetSearchTextBox.Text = s;
AssetSearchButton_Click(sender, e);
}
}
}