C# web应用程序中的导航错误
我只是这个程序语言的新手,我做了一个关于它的小项目。有谁能告诉我我会为这个错误做什么?!首先,它工作得很好,但当我单击其他选项卡时,它将不会处理,这将是错误C# web应用程序中的导航错误,c#,asp.net,database,C#,Asp.net,Database,我只是这个程序语言的新手,我做了一个关于它的小项目。有谁能告诉我我会为这个错误做什么?!首先,它工作得很好,但当我单击其他选项卡时,它将不会处理,这将是错误 Class1 ob = new Class1(); ob.dt = (DataTable)Session["cart"]; string str = ""; if (ob.dt.Rows.Count == 0 ) { str = "_______________________________"; ListBox1.It
Class1 ob = new Class1();
ob.dt = (DataTable)Session["cart"];
string str = "";
if (ob.dt.Rows.Count == 0 )
{
str = "_______________________________";
ListBox1.Items.Add(str);
str = "No Item Selected";
ListBox1.Items.Add(str);
str = "_______________________________";
ListBox1.Items.Add(str);
}
else
{
str = " " + "Product " + "Quantity";
ListBox1.Items.Add(str);
str = "_______________________________";
ListBox1.Items.Add(str);
int index = 1;
for (int j = 0; j <= ob.dt.Rows.Count - 1; j++)
{
DataRow dr = ob.dt.Rows[j];
str = Convert.ToString(index) + ". " + Convert.ToString(dr["pname"])
+"" + Convert.ToString(dr["qty"]);
ListBox1.Items.Add(str);
index++;
}
int total = Class2.gettotalprice();
str = "_______________________________";
ListBox1.Items.Add(str);
str = "Total Amount= " + total.ToString();
ListBox1.Items.Add(str);
}
class1ob=newclass1();
ob.dt=(数据表)会话[“购物车”];
字符串str=“”;
如果(ob.dt.Rows.Count==0)
{
str=“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”;
列表框1.Items.Add(str);
str=“未选择任何项目”;
列表框1.Items.Add(str);
str=“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”;
列表框1.Items.Add(str);
}
其他的
{
str=“”+“产品”+“数量”;
列表框1.Items.Add(str);
str=“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”;
列表框1.Items.Add(str);
int指数=1;
对于(int j=0;j),应始终检查以确保正在操作的对象不为空
如果您将条件替换为以下条件,这将防止您在该行上获得空引用错误:
if (ob != null && ob.dt != null && ob.dt.rows != null && ob.dt.rows.Count == 0)
您的ob
或dt
对象是null
。查找分配或设置这些对象的代码行,并查看它们为什么为null
。当它们为null时,您无法调用该对象上的方法或访问该对象上的属性,因为您没有该类的实例e您将ob
或dt
设置为空。或者您从未实例化它们,但我怀疑这是真的。看起来您没有从试图访问的存储库中返回任何记录或其他内容
编辑:
您看到了第二个问题,因为您没有检查空对象。您可以将for循环包装为空检查,但我不能告诉您程序中的任何地方都必须进行空检查
if (ob != null && ob.dt != null && ob.dt.rows != null)
{
for (int j = 0; j <= ob.dt.Rows.Count - 1; j++)
{
DataRow dr = ob.dt.Rows[j];
str = Convert.ToString(index) + ". " + Convert.ToString(dr["pname"])
+"" + Convert.ToString(dr["qty"]);
ListBox1.Items.Add(str);
index++;
}
}
if(ob!=null&&ob.dt!=null&&ob.dt.rows!=null)
{
对于(int j=0;j首先检查数据在使用前是否为空,如下所示:
if (ob.dt == null)
{
//handle here
return;
}
//and your code goes here
if (ob.dt.Rows.Count == 0 )
{
str = "_______________________________";
ListBox1.Items.Add(str);
str = "No Item Selected";
ListBox1.Items.Add(str);
str = "_______________________________";
ListBox1.Items.Add(str);
}
.....
似乎ob/dt是空的,您介意发布一些代码吗?好的,我会..等一下..public Class1(){dt=new DataTable(“cart”);dt.Columns.Add(“id”,typeof(Int32));dt.Columns[“id”];AutoIncrement=true;dt.Columns[“id”]。AutoIncrementSeed=1;dt.Columns.Add(“pid”,typeof(string));dt.Columns.Add(“pname”,typeof(string));dt.Columns.Add(“qty”,typeof(Int32));dt.Columns.Add(“price”,typeof(Int32));dt.Columns.Add(“img”,typeof(string));///TODO:在此处添加构造函数逻辑//}停止在注释中粘贴代码,这很难阅读。请编辑问题以包含这些代码。@user3247143-请编辑您的问题…并将所有这些放在其中,然后查看此代码public Class1(){dt=new DataTable(“cart”);dt.Columns.Add(“id”,typeof(Int32));dt.Columns[“id”].AutoIncrement=true;dt.Columns[“id”].AutoIncrementSeed=1;dt.Columns.Add(“pid”,typeof(string));dt.Columns.Add(“pname”,typeof(string));dt.Columns.Add(“数量”,typeof(Int32));dt.Columns.Add(“price”,typeof(Int32));dt.Columns.Add(“img”,typeof(string));///TODO:Add constructor logic here//}@user3247143请将代码放入问题中并在编辑器中格式化。当然,这将是最好的解决方案,当然还有Session[“cart”]是这里的罪魁祸首。可以使用我建议的解决方案,这样您就不会出现错误,//handle here comment可以用于处理NullReference。但是,它将是什么样的处理方式?对“^question.XD”的回答是“Session[“cart”]从何而来?”
if (ob.dt == null)
{
//handle here
return;
}
//and your code goes here
if (ob.dt.Rows.Count == 0 )
{
str = "_______________________________";
ListBox1.Items.Add(str);
str = "No Item Selected";
ListBox1.Items.Add(str);
str = "_______________________________";
ListBox1.Items.Add(str);
}
.....