将会话值传递给另一个会话值

时间:2015-08-28 07:09:15

标签: c# asp.net session webforms

我有一个asp.net webform页面,其中有2个单选按钮,这些单选按钮将所选值存储在session中,并显示在我的确认页面上。当用户点击提交按钮时,会发送一封包含所有详细信息的电子邮件(同样所有详细信息都显示在session)。

我在查看电子邮件中所选单选按钮的值时遇到问题。我能看到的唯一选择是有两个相同的字段标签,其中一个是空的,另一个是会话中显示的选定值。

我尝试将以下IF添加到我的电子邮件正文中,但它会从我的电子邮件中删除所有详细信息。

我原以为我可以在我的IF statement文件中使用.cs检查其中一个单选按钮不是null,然后创建另一个session variable。我无法弄清楚如何传递session条件中的IF值来填充新的session

带有单选按钮的页面的HTML

<div class="form-group">
     <asp:Label ID="PrefContactLabel" class="col-sm-3 control-label" runat="server" Text="Preferred method of contact *" style="padding-top: 0px"></asp:Label>
     <div class="col-sm-3">
          <asp:Label runat="server" class="radio-inline" style="padding-top: 0px">
               <asp:RadioButton runat="server" id="PhoneRadioButton" value="Phone" GroupName="prefcontact"/> Phone
          </asp:Label>
               <asp:Label runat="server" class="radio-inline" style="padding-top: 0px">
               <asp:RadioButton runat="server" id="EmailRadioButton" value="Email" GroupName="prefcontact"/> Email
          </asp:Label>
     </div>
     <div class="col-sm-offset-3 col-sm-9">
          <asp:CustomValidator id="custPrefContact" runat="server" Display="Dynamic" ForeColor="Red" ErrorMessage="Please select a preferred method of contact." ClientValidationFunction="PrefContact_ClientValidate" OnServerValidate="PrefContact_ServerValidate" />
     </div>
</div>

带有单选按钮的页面后面的代码

protected void Step01SubmitButton_Click(object sender, EventArgs e)
{
     Session["PhoneRadioButton"] = PhoneRadioButton.Checked ? "Phone" : "";
     Session["EmailRadioButton"] = EmailRadioButton.Checked ? "Email" : "";
}

这是我在上面代码中添加的IF语句的开头

if (Session["PhoneRadioButton"].ToString() == "Phone" || Session["EmailRadioButton"].ToString() == "Email")
{
     Session["PrefContactRadioButton"] = Step01HiddenPrefField.Text;
}

这是在我的确认页面上打破我的电子邮件的代码行

Label4.Text + " " + Session["PhoneRadioButton"].ToString() == "Phone" ? Session["PhoneRadioButton"].ToString() : Session["EmailRadioButton"].ToString();

我想填充我的&#34;会话[&#34; PrefContactRadioButton&#34;]&#34;来自&#34;会话[&#34; PhoneRadioButton&#34;] /会话[&#34; EmailRadioButton&#34;]&#34;。

2 个答案:

答案 0 :(得分:0)

这条线对我来说很危险:

Label4.Text + " " + Session["PhoneRadioButton"].ToString() == "Phone" ? Session["PhoneRadioButton"].ToString() : Session["EmailRadioButton"].ToString();

如果在字符串连接中使用三元运算符,请在其周围加上括号。

Label4.Text + " " + (Session["PhoneRadioButton"].ToString() == "Phone" ? Session["PhoneRadioButton"].ToString() : Session["EmailRadioButton"].ToString());

答案 1 :(得分:0)

经过将近一个月的尝试排除它之后无法相信,它只是来找我,只需对两个单选按钮使用相同的session名称,并猜测它的工作原理。

更新了.cs代码

    if (PhoneRadioButton.Checked)
    {
        Session["PrefContactRadioButton"] = PhoneRadioButton.Checked ? "Phone" : "";
    }
    else if (EmailRadioButton.Checked)
    {
        Session["PrefContactRadioButton"] = EmailRadioButton.Checked ? "Email" : "";
    }

然后更新了我的确认页面以调用我的新session变量

    <div class="form-group">
        <asp:Label ID="Step01ContactMethod" class="col-xs-6 col-sm-3 control-label" runat="server" Text="Preferred method of contact:"></asp:Label>
        <div class="col-xs-6 col-sm-9 form-control-static">                            
            <%=Session["PrefContactRadioButton"] %>
        </div>
    </div>

最后更新了我的确认页面电子邮件正文

msg.Body = Step01ContactMethod.Text + " " + Session["PrefContactRadioButton"].ToString();

瞧它有效。