我有两个功能齐全的页面,它们在资产管理系统中执行不同的任务。一方面,该页面可以使用网格视图显示带有序列号的资产列表。在那个视图中,我希望序列号是可点击的,并打开另一个实际显示特定资产信息的页面。我已经想出了如何使链接可点击,并让它打开另一个页面,将序列号作为查询字符串传递。问题是加载其他页面时。我只希望它处理那个序列号一次——处理完之后,它需要回到使用页面上的输入框来显示序列号。到目前为止,我让页面读取查询字符串,将其保存为会话变量,然后在没有查询字符串的情况下重定向回自身。问题出在重定向上,它似乎没有重新处理 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);
}
}
}