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

本文关键字:最佳 方式 字符串 查询 删除 处理 | 更新日期: 2023-09-27 17:50:58

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

    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的回答的启发下编写的工作代码。检查回发,并将其保留为querystring即可。我讨厌丑陋的网址,但我可以处理!

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

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

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

试试这样写:

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

如果您可以避免使用会话,除非您确实需要,而完全依赖于查询字符串,这不是更容易吗?

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