0

我在 Site.Master 中有:

<% if(Session["msg"]!=null) Response.Write(Session["msg"].ToString()); %>

我也有提交表单方法:

protected void Send_Click(object sender, EventArgs e)
{
Session["msg"] = "Thx for email.";
Response.Redirect("~/Default.aspx");
}

但是现在当我刷新页面或转到另一个页面时,我仍然看到“Thx for email”。但用户应该只看到一次。

4

4 回答 4

0

尝试在页面上打印 Session["msg"] 后将其设置为 null。

于 2013-06-04T14:19:11.390 回答
0

您可以清除Session["msg"]on Page_load(out of the if(!isPostback))

或者,您可以在母版页上创建一个标签,通过子页面访问该标签以将消息放入其中,并在页面加载时清除该标签,这使您远离使用 Session。使用标签,您还可以设置 cssClass,允许加粗、颜色更改(红色表示错误,绿色表示成功等)。

如果您只想要一个计划消息,您可以使用文字控制,减少开销。

于 2013-06-04T14:15:33.250 回答
0

这是因为Session变量在会话中具有其值。

Session["msg"]

在会话中的所有页面上将始终具有相同的值。

如果您希望该值仅用于您重定向的页面,那么您可以使用querystring.

protected void Send_Click(object sender, EventArgs e)
{
  Session["msg"] = "Thx for email.";
  Response.Redirect("~/Default.aspx?msg='true'");
}

然后在 SiteMaster

<% if(Request.QueryString["msg"]!=null) Response.Write(Session["msg"].ToString()); %>
于 2013-06-04T14:15:41.477 回答
0

您必须Session["msg"] = null在显示消息后进行设置。会话在服务器中默认为 20 分钟。如果您不将其设置为空,它将出现

于 2013-06-04T14:16:11.627 回答