session未将对象引入到实例!!!!之前还好好的忽然一下不可以了,这是为什么

fleetingevent 2016-04-01 09:20:27


购物车代码!!为什么我的session【“Cart”】一直为null,之前还可以,今天再一调试的时候就出错!!!!!!
public partial class ProductDetail : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//用购物车存储用户挑选的商品
private DataRow getProductByID(string ProductID)//自定义方法getProductID
{
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["UserDBConnectionString"].ConnectionString);
//sqlconnection表示与sql server数据源的唯一的会话
//conf里面的句子表示获取userdbcns的对应值(web config)
SqlCommand cmd = new SqlCommand("select *from Products where ProductID=@ProductID", cn);
cmd.Parameters.Add("@ProductID", SqlDbType.NVarChar).Value = ProductID;
DataSet ds = new DataSet();
//dataset(支持ado.net中的断开连接的分布式数据方案)是数据驻留在内存中的表现形式,还有datarow,table(web开发书里面94)
SqlDataAdapter da = new SqlDataAdapter(cmd);
//sqldataadpter 是dataset和sqlserver的桥接器,用于检索和保存数据。当sda填充dataset时,它返回的数据创建必需的表和列(当表和列不存在)
//查看ado.net架构(开题报告里也有)
cn.Open();
da.Fill(ds);
cn.Close();
if (ds.Tables[0].Rows.Count > 0)
return ds.Tables[0].Rows[0];
else return null;
}
/* protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
txtTime.Text= ddlYear.SelectedItem.Text;
}*/
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
//按下购物按钮之后,完成加入购物车这个动作
if (e.CommandName == "Buy")
{
DataRow dr = getProductByID(Request.QueryString["ProductID"]);//自定义的方法;datarow表示实际包含的数据。用于检索、计算、处理表中数据。
string ProductID = dr["ProductID"].ToString();
string ProductName = dr["ProductName"].ToString();
string Color = dr["Color"].ToString();
double Price = Convert.ToDouble(dr["Price"].ToString());
string Time=Convert.ToString(((TextBox)(e.Item.FindControl("txtTime"))).Text);
string T_UserAddress = dr["T_UserAddress"].ToString();

DataTable dt;

if (Session["Cart"] != null)

{
dt = (DataTable)Session["Cart"];//进行相应的类型转换
}
else
{
dt = new DataTable();
DataColumn dc;
dc = new DataColumn("ProductID", typeof(String));
dt.Columns.Add(dc);
dc = new DataColumn("ProductName", typeof(String));
dt.Columns.Add(dc);
dc = new DataColumn("Price", typeof(double));
dt.Columns.Add(dc);
dc = new DataColumn("Time", typeof(String));
dt.Columns.Add(dc);
dc = new DataColumn("T_UserAddress", typeof(String));
dt.Columns.Add(dc);

}
bool IsExist = false;//!!!!!!!!!!!!!!!有错!!添加不了多的商品!!!ok!!!!!!!!!!!!
for (int I = 0; I < dt.Rows.Count; I++)
{ if(dt.Rows[I]["ProductID"].ToString()==ProductID)//hahhahahah!!!!!1
{
IsExist = true;
dt.Rows[I]["Time"] = Convert.ToInt32(dt.Rows[I]["Time"].ToString());
dt.Rows[I]["T_UserAddress"] = Convert.ToInt32(dt.Rows[I]["T_UserAddress"].ToString());
break;
}
}
if (!IsExist)
{
DataRow drNew = dt.NewRow();
drNew["ProductID"] = ProductID;
drNew["ProductName"] = ProductName + "(" + Color + ")";
drNew["Price"] = Price;
drNew["Time"]=Time;
drNew["T_UserAddress"] = T_UserAddress;
dt.Rows.Add(drNew);
}
Session["Cart"] = dt;//到下一个shoppingcart中
Response.Redirect("AddCartSuccess.aspx");
}
}

}




我后面的shoppingcart.aspx就总是跳转回Products.aspx
...全文
353 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fleetingevent 2016-09-12
  • 打赏
  • 举报
回复
已经过去好久啦,我是来自我总结的 其实后面也是迷迷糊糊的不知道怎么回事就解决了。我记得有一点是有些浏览器会禁用cookie,同时也会禁用session 所以我就换了一个浏览器。。。。然后他就莫名好了。。。。。 感谢大家,毕设做完了,结果现在又要用到C#。。。。
fleetingevent 2016-04-09
  • 打赏
  • 举报
回复
引用 12 楼 u014617792 的回复:
显示的{}这个你可以点进去看。。。。或者你再下面把这session再赋值给一个string看看session到底有没有值
tostring就有错了,是null,可是怎么办?
fei缘如水 2016-04-06
  • 打赏
  • 举报
回复
显示的{}这个你可以点进去看。。。。或者你再下面把这session再赋值给一个string看看session到底有没有值
fleetingevent 2016-04-06
  • 打赏
  • 举报
回复
引用 10 楼 u014617792 的回复:
你给session赋值的地方看看
if (Session["Cart"] != null) { dt = (DataTable)Session["Cart"];//进行相应的类型转换 } else//为空时 { dt = new DataTable(); DataColumn dc1;//datacolumn用来定义其框架 DataColumn dc2; DataColumn dc3; DataColumn dc4; DataColumn dc5; dc1 = new DataColumn("ProductID", typeof(String)); dt.Columns.Add(dc1); dc2 = new DataColumn("ProductName", typeof(String)); dt.Columns.Add(dc2); dc3 = new DataColumn("Price", typeof(double)); dt.Columns.Add(dc3); dc4 = new DataColumn("Time", typeof(String)); dt.Columns.Add(dc4); dc5 = new DataColumn("T_UserAddress", typeof(String)); dt.Columns.Add(dc5); AddShoppingCart(ProductID, ProductName, Price, Time, T_UserAddress); Session["Cart"] = dt; 我找别人帮我看了一下,改了一下 自定义方法 public void AddShoppingCart(string ProductID, string ProductName, double Price, string Time, string T_UserAddress) { //添加购物车 DataRow dr = dt.NewRow(); dr[0] = ProductID; dr[1] = ProductName; dr[2] = Price; dr[3] = Time; dr[4] = T_UserAddress; dt.Rows.Add(dr); } 但是session【“Cart”】显示还是{} dt在监测里面也还是{}
fei缘如水 2016-04-06
  • 打赏
  • 举报
回复
你给session赋值的地方看看
myhope88 2016-04-06
  • 打赏
  • 举报
回复
这个要跟进session的赋值情况
fleetingevent 2016-04-05
  • 打赏
  • 举报
回复
引用 5 楼 yi_iy 的回复:
断点调试看下ProductDetail 页面

        Session["Cart"] = dt;//到下一个shoppingcart中
到这边有值吗? 会不会没执行这里?
null 之前我也不是很弄懂session的时候,就这么一试,发现可以添加到购物车里面,可是前几天忽然不行了,所有用session的全部为null了。。。。。。。然后我就想为你session在用之前有赋值定义这么一说吗?
fleetingevent 2016-04-05
  • 打赏
  • 举报
回复
引用 4 楼 hanjun0612 的回复:
数据库数据变化过吗?或者说数据库的连接字符串有没有改动过?
连接字符串是说connectionstring吗?那个没动过。
fleetingevent 2016-04-04
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
是的
还是不行TAT
正怒月神 版主 2016-04-01
  • 打赏
  • 举报
回复
数据库数据变化过吗?或者说数据库的连接字符串有没有改动过?
  • 打赏
  • 举报
回复
是的
fleetingevent 2016-04-01
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
配置里面将session改为stateserver试试呢,不要用inproc
你是说 <sessionState mode="StateServer" 这个吗?
  • 打赏
  • 举报
回复
配置里面将session改为stateserver试试呢,不要用inproc
  • 打赏
  • 举报
回复
断点调试看下ProductDetail 页面

        Session["Cart"] = dt;//到下一个shoppingcart中
到这边有值吗? 会不会没执行这里?

62,270

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧