将会话变量从一个页面传递到另一个页面

本文关键字:另一个 一个 变量 会话 | 更新日期: 2023-09-27 18:30:34

我不久前用PHP做了这件事,现在我想用C#来做。我想我可能走在正确的轨道上,但一路上出了点问题。

我有一个"创建订单"页面,其中包含用户想要购买的一篮子商品。在此页面上,他们可以按名称或 SKU 搜索产品,如果他们输入了有效内容,则会显示结果的网格视图。然后,他们可以导航到添加/更新页面,在该页面中,他们可以将新产品添加到购物篮中,也可以编辑/更新已有的产品。这会将它们带回购物篮页面。

在"创建订单"页面上,我根据是否在 url 查询字符串中找到购物车 ID 设置一个带有购物车 ID 的会话变量:

    protected void CreateSessionVariable()
    {
        string session = "";
        if (Request.QueryString["CartID"] != "" & Request.QueryString["CartID"] != null)
        {
            session = Request.QueryString["CartID"];
            Session["CartValue"] = session;
        }
        else
            Session["CartValue"] = "";
    }

然后我调用这是Page_Load函数:

        if (!Page.IsPostBack)
        {
            BindBasketGrid();
            //call function
            if (Session["CartValue"] != "" & Session["CartValue"] != null)
            {
                string CartCode = Request.QueryString["CartID"];
                CartIDLbl.Visible = true;
                CartIDLbl.Text += CartCode;
            }
            else
                CreateSessionVariable();
        }

在添加/更新页面的Page_Load中,这就是我所说的(它在 !Page.IsPostBack:

                if (Session["CartValue"] != "" & Session["CartValue"] != null)
                {
                    string CartCode = Session["CartValue"].ToString();
                    CartIDLbl.Visible = true;
                    CartIDLbl.Text += CartCode;
                }

事情工作了一段时间 - 会话变量从"创建订单"页面成功传递到添加/更新页面。但是,返回到"创建订单"页面时,不再设置会话变量。

我设置不正确吗?

将会话变量从一个页面传递到另一个页面

您使用

&使条件Session["CartValue"] != "" & Session["CartValue"] != null按位 AND。

在 C# 中,需要执行 AND,&&

if (Session["CartValue"] != "" && Session["CartValue"] != null

这个语句可以这样写得更容易:

string s = Session["CartValue"] as string;
if (!string.IsNullOrEmpty(s))

您确定会话变量 CartValue 是否在"创建订单"页面中写得很好,以及生成会话变量的条件是否正在发生?

我建议您在 !回发条件:

    //Create a private variable.
    private string CartValue;
    protected void Page_Load(object sender, EventArgs e)
    {
        //Check your session variable "will be empty if the session variable is null".
        CartValue = Session["CartValue"] != null && !string.IsNullOrEmpty(Session["CartValue"].ToString()) ? Session["CartValue"].ToString() : "";
        if (!IsPostBack)
        {
            //Your code...
        }
    }

检查会话变量,例如-

Session["CartValue"] != "" & Session["CartValue"] != null

错了。

可能的意外引用比较;若要获取值比较,请将左侧转换为键入"string"。您应该检查会话变量是否为 NULL。如果不是 NULL,则会话变量的值为 null 或空。

if (Session["CartValue"] != null && !string.IsNullOrEmpty(Session["CartValue"].ToString())){
    // your code..
}