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

时间:2014-11-14 15:52:55

标签: c# asp.net session

我以前用PHP做过这个,现在我想用C#做。我想我可能走在正确的轨道上,但在此过程中出现了问题。

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

在“创建订单”页面上,我根据是否在网址查询字符串中找到购物车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;
                }

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

我的设置不正确吗?

3 个答案:

答案 0 :(得分:0)

您使用的&使条件Session["CartValue"] != "" & Session["CartValue"] != null成为按位AND。

在C#中,您需要&&来执行AND:

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

这句话可以更简单地写成:

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

答案 1 :(得分:0)

您是否确定会话变量 CartValue 是否在“创建订单”页面中写得很好并且是否发生了生成会话变量的条件?

我建议您检查以外的会话变量的值!IsPostback条件:

    //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...
        }
    }

答案 2 :(得分:0)

检查会话变量,如 -

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

错了。

可能的意外参考比较;要获得值比较,请将左侧投射到键入' string'。您应该检查Session变量是否为NULL。如果不为NULL,则会话变量的值为空或空。

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