我有两个功能完备的页面,可以在资产管理系统中执行不同的任务。在一个页面上,页面可以使用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);
}
}
}
答案 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
}
}