0

CMS 3.0 プロジェクトに次のコードがあります。

SurveyController.cs

private BuisnessSurveyEntities bsdb = new BuisnessSurveyEntities();

[HttpGet]
public ViewResult BizSurveyCDF()
{
  var bquery = from b in bsdb.form_field
               where b.ID != null        // int
               where b.DATID != null     // int
               where b.CAPTION != null   // string
               select new {b.ID, b.DATID, b.CAPTION};

  ViewData["BZQUESTIONS"] = new SelectList(bquery,"ID","DATID","CAPTION");
  return View();
}

form_field.cs モデル

public virtual string ID {GET; SET;}
public virtual string DATID
{
  get{return _dATID;}
  set{_dATID = value;}
}
private string _dATID = "\'\'";

BizSurveyCDF.cshtml

@model IEnumberable<CMS.Models.form_field>

<table>
  <tr>
    <th>
      DATID
    </th>
    <th>
      CAPTION
    </th>
  </tr>
  @foreach(var item in Model)
  {
    <tr>
      <td>
        @Html.DisplayFor(modelItem => item.DATID)
      </td>
      <td>
        @Html.DisplayFor(modelItem => item.CAPTION)
      </td>
    </tr>
  }
</table>

今私の問題は、実行すると次のエラーが発生することです。

オブジェクト参照がオブジェクト インスタンスに設定されていません。

問題のある行は @foreach(var item in Model) です

テーブル全体を調べて、すべての NULL 値を何かに置き換えましたが、まだこのエラーが発生しています。これまでに読んだことはすべて、NULL 値に問題があると言っていますが、すでに述べたように、すべての null 値を取り除きました。

どんな助けでも大歓迎です。

ありがとう

4

3 に答える 3

2

このようなことを試して、モデルをビューに渡し、クエリで新しいオブジェクトを作成せずに、完全なform_fieldオブジェクトを選択します。

public ViewResult BizSurveyCDF()
{
  var bquery = from b in bsdb.form_field
               where b.ID != null        // int
               where b.DATID != null     // int
               where b.CAPTION != null   // string
               select b;

  //ViewData["BZQUESTIONS"] = new SelectList(bquery,"ID","DATID","CAPTION");
  return View(bquery);
}

ビューでViewData["BZQUESTIONS"]を使用していません

于 2012-05-16T16:06:19.340 に答える
0

例外が発生する理由は、クエリが実際に値を返さないことが原因である可能性があります。したがって、SelectListソースとして渡される前に、クエリに少なくとも1つの要素が含まれていることを確認してください。たとえば、これらの行に沿って何かを試してください。 :

if(bquery.Any())
 {
   ViewData["BZQUESTIONS"] = new SelectList(bquery,"ID","DATID","CAPTION");
 }
else
{
   // Add code here to address there being of no element returned by the query 
}   
return View();
于 2012-05-16T19:45:50.130 に答える
0
  1. 実際のコードにIEnumberableではなくIEnumerableが含まれていることを確認してください

  2. int は値型であるため、null になることはありません。これらの where 句は不要です。

  3. 匿名オブジェクトを作成しているため、モデルは期待されるタイプではなくなります。これが、DivHenr のソリューションを試したときに失敗した理由です。匿名オブジェクトを選択しないでください。

  4. また、クエリの評価を強制し、(viewdata ではなく) ビュー メソッドのモデル パラメーターに渡します。

あなたのクエリとアクションは-

  return View(  
       (from b in bsdb.form_field
       where b.CAPTION != null
       select b)
       .ToList() );
于 2012-05-16T22:36:38.500 に答える