0

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

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

2 回答 2

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
        }            
}
于 2013-01-08T16:45:58.490 回答
0

如果查询字符串不为空,您只设置 Session 变量,而我认为如果没有查询字符串,您希望将其清除。

尝试这样的事情:

Session["SN"] = s;  

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