【问题标题】:ASP.NET MVC 5 empty ApplicationUserASP.NET MVC 5 空 ApplicationUser
【发布时间】: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


【解决方案1】:

您是否尝试过“public virtual ApplicationUser user { get; set; }”?

我认为您必须将其设为虚拟才能访问 ApplicationUser 属性或将视图中的代码更改为“@Html.DisplayFor(modelItem => item.user)”

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 2014-04-04
    • 1970-01-01
    • 2015-09-12
    • 2015-02-07
    • 2014-01-22
    • 1970-01-01
    • 2017-09-05
    相关资源
    最近更新 更多