Html.DisplayFor通过其他表查询返回一个空字符串

时间:2016-04-14 07:52:49

标签: asp.net-mvc asp.net-identity code-first

我试图弄清楚如何使用ASP.Net Identity制作用户个人资料时遇到了障碍。我有我的数据库设置 this,其中Id AspNetUsersUserPages的外键。

我正在使用标准代码将模型传递给视图:

public ActionResult View(string id)
{
    UserPage userPage = db.UserPages.Find(id);
    (...)
    return View(userPage);
}

我的模特:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
using System.Web.WebPages.Html;

namespace Citrus.Models
{
    public class UserPage
    {
        [Key]
        public string Id { get; set; }

        [ForeignKey("Id")]
        public ApplicationUser User { get; set; }

        public string AboutMe { get; set; }

        public string AvailableTime { get; set; }

    }
}

然后在视图中我可以使用

@Html.DisplayFor(model => model.AboutMe)

在数据库AboutMe中显示属性UserPages。但是,当我尝试通过模型从AspNetUsers获取数据时,如下所示:

@Html.DisplayFor(model => model.User.Name)

我只回来一个空字符串。 User.Name不可为空,并且该条目存在于数据库中。该方法返回空的原因是什么,如何解决?

1 个答案:

答案 0 :(得分:0)

原来我从未将AspNetUsers包含在UserPages查询中。

UserPage userPage = db.UserPages.Find(id);

使用以下代码替换我的查询可以解决问题:

UserPage userPage = db.UserPages.Include(x => x.User).Where(x => x.Id == id).FirstOrDefault()

我现在可以使用@Html.DisplayFor(model => model.User.Property)

获取用户的任何属性