【发布时间】:2015-01-16 10:18:44
【问题描述】:
我有一张带有 [QuestionID] [Description] [User_id] 的表格。
public int QuestionID { get; set; }
public string Description { get; set; }
public ApplicationUser user { get; set; }
当用户使用表单发送问题并且所有字段都正确保存时,问题存储在数据库中。
我从我的 QuestionController 发送一个列表,其中包含所有问题到我的视图:
return View(db.Questions.ToList());
在我看来,我使用该列表:
@foreach (var item in Model)
{
<tr>
<td class="td-title">
@Html.DisplayFor(modelItem => item.QuestionID)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.user.id)
</td>
</tr>
...
除了 item.user.id 没有显示任何值(它被填充到数据库中)之外,一切都有效。这怎么是空的?我该怎么做才能显示用户信息?
编辑:
我使用代码优先,这就是我填写数据库的方式:
public ActionResult Create([Bind(Include = "QuestionID,Description")] Question question)
{
if (ModelState.IsValid)
{
question.user = UserManager.FindById(User.Identity.GetUserId());
db.Questions.Add(question);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(question);
}
表格后的数据库结果示例:
[QuestionID] [Description] [user_Id]
1 blalbla.. 397d27d...
【问题讨论】:
-
在将 ID 传递给视图之前,控制器中的 ID 是否为空?你为什么不使用视图模型? - MVC 通常无法很好地执行“复杂”对象的序列化(在您的情况下是嵌套/分层)...尝试将传递给视图的内容简化为一个平面 ViewModel 对象。或尝试类似 ((ApplicationUser)item.user).id
-
当我从创建列表的同一控制器中的数据库中获取一个 Question 对象时,它也提供了一个空用户(尽管它不是空的数据库)。所以最好的做法是使用视图模型并从我的问题模型中删除 ApplicationUser?
-
首先显示用于填充 db.Questions 的代码。你在使用实体框架吗?如果是这样并且 ApplicationUser 是一个实体,那么您可能没有为 ApplicationUser 的问题(使用外键)正确设置导航属性,或者您用于检索信息的查询不正确,或者 EF 中的映射不正确正确,如果您先使用数据库,它们应该是正确的,如果您先使用代码,那么它可能是一个错误。
-
已编辑问题,因此您现在可以看到我是如何填充的以及它的结果。看起来在创建过程中一切正常。
标签: c# linq model null asp.net-mvc-5