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

1つは、ds宣言されて設定されているのがどこにも表示されないので、それが存在することは確かですか? あなたはそれに割り当てますか?また、最初のインデックスで 1 つにアクセスしようとする前に、少なくとも 1 つのテーブルがあるかどうかを確認するチェックがないため、 が であり が割り当てられている場合でも、NullReferenceExceptionここに が存在する可能性があります。dsDataSet

したがって、この点 (および自由に追加できるシナリオ固有のロジック) を徹底するには、次のようにします。

@if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) {
于 2013-02-15T08:28:28.147 に答える
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 はまったく宣言されません。それは1つのエラーになります。次に、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 に答える