对象引用未设置为不存在NULL字段的对象的实例

时间:2012-05-16 15:53:46

标签: c# sql asp.net-mvc linq

我的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项目)

我已经浏览了整个表并用某些东西替换了所有NULL值,但仍然收到此错误。到目前为止,我读到的所有内容都表明它存在NULL值问题,但正如我已经说过的那样,我已经摆脱了所有空值。

任何帮助都会非常感激。

由于

3 个答案:

答案 0 :(得分: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”]

答案 1 :(得分:0)

您获得异常的原因可能是您的查询实际上没有返回任何值。因此,请确保查询在作为SelectList源传递之前至少包含一个元素。例如,尝试一些事情沿着这些方向:

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();

答案 2 :(得分:0)

  1. 确保实际代码包含IEnumerable而不是IEnumberable

  2. int是一个值类型,因此永远不会为null。这些条款是不必要的。

  3. 您正在创建一个匿名对象,因此模型最终不是预期的类型,这就是您尝试DivHenr解决方案时失败的原因。不要选择匿名对象。

  4. 此外,强制评估查询并将其传递给view方法的model参数(而不是viewdata)。

  5. 您的查询和操作应该是   -

      return View(  
           (from b in bsdb.form_field
           where b.CAPTION != null
           select b)
           .ToList() );