0

我的 CMS 3.0 项目中有以下代码

调查控制器.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(模型中的变量项)

我浏览了整个表并用某些东西替换了所有 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 源传递之前,请确保查询包含至少一个元素。例如,尝试按照这些行进行操作:

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. 确保实际代码包含 IEnumerable 而不是 IEnumberable

  2. int 是一个值类型,因此永远不会为空。这些 where 子句是不必要的。

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

  4. 此外,强制评估您的查询并将其传递给视图方法的模型参数(而不是视图数据)。

您的查询和操作应该是 -

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