将会话变量从一个页面传递到另一个页面
本文关键字:另一个 一个 变量 会话 | 更新日期: 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..
}