【问题标题】:Clearing label if page is changed or refreshed如果页面更改或刷新,则清除标签
【发布时间】:2016-01-20 21:24:43
【问题描述】:

我创建了一个电子邮件表单,当用户点击提交时。如果页面被刷新,该页面会将自身重定向到同一页面以防止重新提交。页面重定向到自身后,标签将显示“谢谢”。问题是当我刷新页面或转到另一个页面并返回时,标签仍然显示“谢谢”而不是“”。刷新页面或更改页面时有没有办法清除 Session["Results"] 或更好的解决方案?提前致谢。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Net.Mail;

public partial class Contact : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Session["ClickedLink"] = "Contact";

        lblResults.Text = "";

        if (!IsPostBack)
        {
            lblResults.Text = Session["Results"].ToString();
        }       
    }

    protected void btnSend_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            string fileName = Server.MapPath("~/App_Data/Contact.txt");
            string mailBody = File.ReadAllText(fileName);
            mailBody = mailBody.Replace("##Name##", txtName.Text);
            mailBody = mailBody.Replace("##Email##", txtEmail.Text);
            mailBody = mailBody.Replace("##Message##", txtMessage.Text);
            MailMessage myMessage = new MailMessage();
            myMessage.Subject = "Response from web site";
            myMessage.Body = mailBody;
            myMessage.From = new MailAddress("intern2@gmail.com", "Sender Name");
            myMessage.To.Add(new MailAddress("intern2@gmail.com", "Receiver Name"));
            myMessage.ReplyToList.Add(new MailAddress(txtEmail.Text));
            SmtpClient mySmtpClient = new SmtpClient();
            mySmtpClient.Send(myMessage);

            txtName.Text = "";
            txtEmail.Text = "";
            txtMessage.Text = "";
        }

        lblResults.Text = "Thank you";
        Session["Results"] = lblResults.Text;
        Response.Redirect("Contact.aspx");

    }
}

【问题讨论】:

    标签: c# asp.net html email session-variables


    【解决方案1】:

    另一种解决方案是在使用后添加一行清除会话变量:

    protected void Page_Load(object sender, EventArgs e)
    {
        Session["ClickedLink"] = "Contact";
    
        lblResults.Text = "";
    
        if (!IsPostBack)
        {
            lblResults.Text = Session["Results"].ToString();
    
            Session["Results"] = null;
        }       
    }
    

    在 QueryString 中,用户可以手动插入一个值以显示在标签中。

    【讨论】:

      【解决方案2】:

      您可以在重定向时在查询字符串中发送消息。

      protected void btnSend_Click(object sender, EventArgs e)
      {
          // ...
      
          Response.Redirect("Contact.aspx?msg=Thanks");
      
      }
      

      在页面加载时

      protected void Page_Load(object sender, EventArgs e)
      {
          Session["ClickedLink"] = "Contact";
      
          lblResults.Text = "";
      
          if (!IsPostBack)
          {
              if (Request.QueryString["msg"] != null) 
                  lblResults.Text = Request.QueryString["msg"];
          }       
      }
      

      【讨论】:

      • 点击发送后出现错误。它说 Description: 在执行当前 Web 请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 异常详细信息: System.NullReferenceException:对象引用未设置为对象的实例。
      • 是的,错误在 Page_Load 中,它在第 20 行:lblResults.Text = Request.QueryString["msg"].ToString();
      • 尝试删除“.ToString()”。并检查是否不为空:' if (!IsPostBack) { if (Request.QueryString["msg"] != null) lblResults.Text = Request.QueryString["msg"]; } ´
      猜你喜欢
      • 2011-12-27
      • 2015-09-15
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 2013-06-21
      相关资源
      最近更新 更多