处理和删除查询字符串的最佳方法

时间:2013-01-08 16:13:50

标签: c# asp.net query-string

我有两个功能完备的页面,可以在资产管理系统中执行不同的任务。在一个页面上,页面可以使用gridview显示具有序列号的资产列表。在该视图中,我希望序列号可以单击,并打开实际显示特定资产信息的其他页面。 我已经想出了如何使链接可点击,并让它打开另一个页面传递序列号作为查询字符串。 问题是当其他页面加载时。我只希望它一次处理该序列号 - 处理后,它需要回到使用页面上的输入框来显示序列号。 到目前为止,我得到了页面来读取查询字符串,将其保存为会话变量,然后在没有查询字符串的情况下重定向回自身。问题出在重定向上,它似乎没有重新处理Page_Load事件,并且读取它在重定向之前设置的会话变量。我知道它设置它,因为如果我点击refesh,它就像一个魅力,并显示该序列号的数据。但为什么我要打refesh?  我的Page_Load事件按顺序调用这两个。 First将查询字符串复制到会话,然后重定向。第二个处理会话变量,并运行与搜索按钮相同的事件处理程序。

    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的回答的启发。检查回发,并将其作为查询字符串工作。我讨厌丑陋的网址,但我可以处理它!

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);
            }
     }
 }

2 个答案:

答案 0 :(得分:0)

如果查询字符串不为空,则只设置Session变量,而我认为如果没有查询字符串,则要清除它。

尝试这样的事情:

Session["SN"] = s;  

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

答案 1 :(得分:0)

如果您可以避免使用Sessions,除非您真的需要,并明确依赖查询字符串,否则这不会更容易。

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
        }            
}