【问题标题】:Sessions not being passed to another page会话未传递到另一个页面
【发布时间】:2014-03-28 18:13:12
【问题描述】:

我正在尝试使用会话将信息从一个页面传递到另一个页面,实际发送发生在单击这样的发送按钮时:

       protected void btnContactMsgSend_Click(object sender, EventArgs e)
    {
        Name = txtName.Text;
        EmailAddress = txtEmailAddress.Text;
        Subject = txtSubject.Text;
        MessageBody = txtMssgBody.Text;


        Session.Add("Name", Name);
        Session.Add("Email", EmailAddress);
        Session.Add("Subject", Subject);
        Session.Add("MessageBody", MessageBody);

        try
        {
            Server.Transfer("~/UserPages/ContactUsConfirm.aspx");
        }
        catch (Exception exc)
        {
            MessageBody = Environment.NewLine + "Error occurred" + exc.ToString() ;
        }
    }

在接收页面中,我执行以下操作:

protected void Page_Load(object sender, EventArgs e) {

        string name = null;
        string email = null;
        string subject = null;
        string message = null;

        try
        {
            name = Convert.ToString(Session["Name"]);
            email = Convert.ToString(Session["Email"]);
            subject = Convert.ToString(Session["Subject"]);
            message = Convert.ToString(Session["MessageBody"]);
        }
        catch (Exception ex)
        {
            txtOutput.Text = Environment.NewLine + ex.ToString(); // edited exception

            name = "Missing name";
            email = "Missing e-mail";
            subject = "Missing subject";
            message = "Missing message";
        }
        txtOutput.Text = Environment.NewLine + name;
        txtOutput.Text = Environment.NewLine + email;
        txtOutput.Text = Environment.NewLine + subject;
        txtOutput.Text = Environment.NewLine + message;

    }

它不起作用,在接收页面我没有得到任何输出。

谁能帮忙?

谢谢

【问题讨论】:

  • 一目了然,我发现在btnContactMsgSend_Click 中,您将名称会话变量设置了 4 次。这会导致问题。
  • 正如@paqogomez 所说,这可能是在 4 个不同时间设置名称的问题。取而代之的是,您不创建具有这些属性的类并通过会话传递该对象吗?
  • 那么,这只是复制粘贴错误吗?还是解决了问题?
  • @paqogomez 你好,谢谢你的回答,我刚刚复制并粘贴了 quicklky 没有注意......现在我已经编辑了上面的代码,但它也不起作用。我也测试过像 Session["Name"] = Name;会话[“电子邮件”] = 电子邮件地址; ...但它也不起作用
  • 当您说“它不起作用”时,您会得到什么?有例外吗?

标签: c# asp.net session webforms


【解决方案1】:

应该是……

Session["Name"] = Name;
Session["Email"] = EmailAddress;
Session["Subject"] = Subject;
Session["Message"] = MessageBody;

【讨论】:

  • 谢谢...复制和粘贴时出错,在帖子中进行了编辑,但它也不起作用...像这样。
【解决方案2】:

问题似乎源于未为会话设置的某些设置。

您是否在 web.config 中为 pages 标记设置了 enableSessionState="true"。还尝试将会话添加到 httpmodules 部分:

<add name="Session" type="System.Web.SessionState.SessionStateModule"/> 

要做的另一件事是尝试使用Context.RewritePath 而不是Server.Transfer

【讨论】:

  • 非常感谢!!好吧,我想这就是问题所在,不,我没有那个设置,有什么好的资料可以阅读吗?
  • 你可以从这里开始:msdn.microsoft.com/en-us/library/…
  • @FlopSicentist 还有一件事.. 我已将 enableSessionState="true" 添加到页面标签,但是当我将另一个标签添加到 httpmodules(在 标签内)时,我得到一个内部 HTTP 错误 500.19。这是为什么呢?
  • 然后,如果我使用 Context.RewritePath 方法,我会收到“服务器错误 Validation of viewstate MAC failed”。
  • 查询 2:blogs.msdn.com/b/tom/archive/2008/03/14/… |||查询 1:当您在 web.config 中进行了一些错误的更新时出现错误 500,可能是某些标签格式错误等。因此请检查您是否正确地对 web.config 进行了更改。检查此线程的最后一个答案,例如如何在 web config 中进行条目:bytes.com/topic/asp-net/answers/655618-how-use-session
【解决方案3】:

您没有为会话变量使用相同的名称。设置和获取时messagrbody和message不一样。

【讨论】:

  • 非常感谢,是的,您是对的,但这仅适用于消息,在这种情况下,它应该输出“无消息”,因为它被异常捕获但没有发生。我刚刚编辑了它,但它也不起作用,即使是: enableSessionState="true"
  • 我认为 session["message"] 只是给出一个空值。然后 convert(null) 不会失败。尝试 session["Message body"].tostring()。这将失败并出现异常。使用 isnullorempty 进行测试是比捕获异常更好的解决方案
  • 您好,谢谢!确实,它现在给了我例外。但是会话仍然不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多