0

資産管理システムで異なるタスクを実行する 2 つの完全に機能するページがあります。1 つは、グリッドビューを使用してシリアル番号付きのアセットのリストをページに表示することです。そのビューで、シリアル番号をクリックできるようにして、特定のアセット情報を実際に表示する別のページを開きます。リンクをクリック可能にし、シリアル番号をクエリ文字列として渡して他のページを開く方法を見つけました。問題は、他のページがロードされるときです。そのシリアル番号を一度だけ処理したい - 処理後、ページの入力ボックスを使用してシリアル番号を表示する必要があります。これまでのところ、クエリ文字列を読み取ってセッション変数として保存し、クエリ文字列なしでページ自体にリダイレクトするようにページを取得しました。問題はリダイレクトにあります。Pag​​e_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);
            }
     }
 }
4

2 に答える 2

0

クエリ文字列がnullでない場合にのみSession変数を設定しますが、クエリ文字列がない場合はクリアする必要があると思います。

次のようなものを試してください。

Session["SN"] = s;  

if (s != null && s.Length > 0)
        {           
            Response.Redirect("/AssetManagement.aspx");
        }
于 2013-01-08T16:17:48.020 に答える
0

本当に必要な場合を除き、セッションの使用を避け、単純にクエリ文字列に頼ることができれば、これは簡単ではないでしょうか。

protected void GetSearchQueryString(object sender, EventArgs e)        
{
    String s = Request.QueryString["SN"];

    if (s != null && s.Length > 0)
    {            
        Response.Redirect("/AssetManagement.aspx");
    }

}

protected void GetSearchSessionVar(object sender, EventArgs e)
{
        if (Request.QueryString["SN"] != null)
        {
            string sessionVal = Request.QueryString["SN"].ToString();
            AssetSearchTextBox.Text = sessionVal; //setting serial number

            AssetSearchButton_Click(sender, e); //Running asset search
        }            
}
于 2013-01-08T16:45:58.490 に答える