我在视图中有以下代码。
index.js
如果comments_id不为0或为空,则以下代码有效。
<span>@Html.DisplayFor(modelItem => item.comments.comments_id)</span>
<span>@item.comments.comments_id</span>
如果它为0或空,我得到
<span>@((item.comments.comments_id == 0) ? 0 : @item.comments.comments_id)</span>
。
该类包含此
System.NullReferenceException: Object reference not set to an instance of an object
如何克服这个问题?提前致谢。
----编辑更多代码---
public Nullable<int> comments_id { get; set; }
查看
public ActionResult Show()
{
var showItems = db.Projects.Include(p => p.Comments).ToList(); // INCLUDES ITEMS FROM BOTH TABLES
return View(showItems);
}
有人发布了类似的内容,但我不明白答案。 http://forums.asp.net/t/1732717.aspx?How+to+check+if+model+property+is+empty+in+View+page
答案 0 :(得分:0)
您需要使用HasValue来检查可空变量是否具有值。
<span>@((item.comments.comments_id.HasValue) ? @item.comments.comments_id : 0)</span>
编辑:添加了示例
您的视图代码看起来应该可以正常工作。下面是我为测试你的观点而编写的代码。控制器操作中的lambda表达式将被执行,直到它被使用。因此,在呈现视图之前,它不可能被执行。这可能会导致问题,因为那时数据库连接可能会关闭。但是,对ToList()的调用应该执行lambda表达式。所以问题可能是item.Comments为null。你应该测试一下,看看它是否和我的例子一样。
<强>控制器强>
public class HomeController : Controller
{
public class Project
{
public string ProjectName { get; set; }
public ProjectComments Comments { get; set; }
}
public class ProjectComments
{
public string Comments { get; set; }
public Nullable<int> comments_id { get; set; }
}
public ActionResult Index()
{
var showItems = new List<Project>();
showItems.Add(new Project()
{
ProjectName = "Project 1",
Comments = new ProjectComments() { Comments = "some comments", comments_id = 1 }
});
showItems.Add(new Project()
{
ProjectName = "Project 2",
Comments = new ProjectComments() { Comments = "more comments", comments_id = null }
});
return View(showItems);
}
}
查看强>
@model IList<MvcApplication2.Controllers.HomeController.Project>
<table border="1">
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ProjectName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Comments.comments_id)
</td>
<td>
<span>
@((item.Comments != null && item.Comments.comments_id.HasValue) ? @item.Comments.comments_id : 0)
<a href="#">Create</a>
</span>
</td>
</tr>
}
</table>