我的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值问题,但正如我已经说过的那样,我已经摆脱了所有空值。
任何帮助都会非常感激。
由于
答案 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)
确保实际代码包含IEnumerable而不是IEnumberable
int是一个值类型,因此永远不会为null。这些条款是不必要的。
您正在创建一个匿名对象,因此模型最终不是预期的类型,这就是您尝试DivHenr解决方案时失败的原因。不要选择匿名对象。
此外,强制评估查询并将其传递给view方法的model参数(而不是viewdata)。
您的查询和操作应该是 -
return View(
(from b in bsdb.form_field
where b.CAPTION != null
select b)
.ToList() );