Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# web应用程序中的导航错误_C#_Asp.net_Database - Fatal编程技术网

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);
}
.....