0

我有以下代码:

  @{

    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "About";
    if(Request["id"].IsEmpty()){
    Write("something");
} else {
    DataSet ds = new DataSet();
   var Id = Request.QueryString["id"].ToString();  
    var db = Database.Open("SmallBakery");
    var selectQueryString = String.Format("SELECT * FROM Products where Id={0}", Id);  
}


}

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
          <table>  

            <tr>  

                <th>Product</th>  

            </tr>  
      @if (ds.Tables[0].Rows.Count >0){

            <tr>  
                <td>@row.Id</td>  
                <td>@row.Name</td>


            </tr>  

          }
    </table>  
    </body>
</html>

这里的问题是我在这一行出现错误:“@if (ds.Tables[0].Rows.Count > 0)”

我的问题是为什么以及如何解决它(我刚开始学习这个,这对我来说是新的......)谢谢。

4

2 回答 2

0

ds 并不总是被声明并且从不被初始化。查看您的初始声明:

@{
    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "About";
    if(Request["id"].IsEmpty()) {
       Write("something");
    } else {
       DataSet ds = new DataSet();
       var Id = Request.QueryString["id"].ToString();  
       var db = Database.Open("SmallBakery");
       var selectQueryString = String.Format("SELECT * FROM Products where Id={0}", Id);  
   }

}

首先,如果查询字符串中没有 id,则根本不声明 ds。那将是一个错误。然后,如果有一个 id,ds 被声明为一个新的数据集,但没有给出一个值(除了一个空的数据集)。这是另一个可能的错误。

你可以这样构造它:

@{
    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "About";
    if(Request["id"].IsEmpty()) {
       Write("something");
    } else {
       DataSet ds = new DataSet();
       var Id = Request.QueryString["id"].ToString();  
       var db = Database.Open("SmallBakery");
       var selectQueryString = String.Format("SELECT * FROM Products where Id={0}", Id); 
       ds = ... **** Use the query here to fill the ds with the required data ****

       **** put the HTML here - this HTML code is not needed
            in the other branch of the if statement ****
   }

}

于 2013-02-15T09:25:49.947 回答
0

一方面,我没有ds在任何地方看到声明和设置,所以你确定它存在吗?你确定你分配给它?NullReferenceException即使ds是 a并且已被分配到,这里也有可能DataSet,因为在您尝试访问第一个索引处的一个表之前,没有检查是否至少有一个表。

因此,要在这方面彻底(以及您可以自由添加的任何特定于场景的逻辑),您可以这样做:

@if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) {
于 2013-02-15T08:28:28.147 回答