我有一个不用新值更新的会话变量。我有两个页面,一个是您输入值并按下按钮然后您被重定向到第2页,在那里您可以检查您的输入,如果这是错误的您单击后退按钮,您将返回到您的第一页可以更改输入但现在当我单击按钮再次验证时,新值不会显示在会话变量中,而只显示旧值。我一直在阅读关于最后一天的会议,但我无法找到问题,背后的代码如下:
第1页
protected void Page_Load(object sender, EventArgs e)
{
if (this.Session["value1"] != null)
{
lbl1.Text = (String)this.Session["value1"].ToString();
}
}
public string info { get { return lbl1.Text; } }
protected void inputButton_onclick(object sender, EventArgs e)
{
Page.Validate();
if (Page.IsValid)
{
Session["value1"] = info;
Response.Redirect("~/validpage.aspx");
}
}
第2页
protected void Page_Load(object sender, EventArgs e)
{
if (Session["value1"] != null)
{
lbl2.Text = (String)Session["value1"].ToString();
}
}
protected void BackButton_Click(object sender, EventArgs e)
{
Session["value1"] = lbl2.Text;
Response.Redirect("~/Default.aspx");
}
也许我对这段代码的自我视力受到了损害,对我而言,这应该不会出现这个问题。任何想法和帮助将不胜感激。
答案 0 :(得分:1)
每次加载Page1时,lbl1都会设置为会话的内容,除非它从未设置过。因此,当您单击该按钮时,lbl1将首先设置回页面加载时的会话内容。然后你读回这个值&但它回到会议中。
试试这个:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostback)
{
if (this.Session["value1"] != null)
{
lbl1.Text = (String)this.Session["value1"].ToString();
}
}
}
这表示如果我们不回发,只设置值,即不点击页面上的按钮。
同样在第2页中,无需调用ToString并强制转换为字符串。做其中之一,而不是两者。