显示除主键之外的其他列int asp MVC

时间:2016-08-28 19:02:28

标签: asp.net asp.net-mvc entity-framework razor

我正在尝试学习ASP.NET MVC 5,但我一开始就陷入困境:)我有简单的数据库

  • dbo.Books(int Id(PK),nvarchar(50)Title,int Author(foreignkey))
  • dbo.Author(int ID(PK),nvarchar(50)Name)

我正在尝试使用Entity Framework显示书籍列表。我的模型看起来像:

public class Author
{
    public int ID { get; set; }
    public string  Name { get; set; }
    public IEnumerable<Book> Books { get; set; }
}

public class MovieContext :DbContext
{
    public DbSet<Books> Books{ get; set; }
    public DbSet<Author> Authors { get; set; }
}

public class Book
{
    public int Id { get; set; }
    public int Author { get; set; }
    public string Title { get; set; }
    [ForeignKey("Author")]
    public virtual Author Authorr { get; set; }
}

当我转到BooksController/index时,它显示了一个书籍列表,但它显示的是ID而不是作者姓名。我试图改变代码

@Html.DisplayFor(modelItem => item.Author)

为此:

@Html.DisplayFor(modelItem => item.Authorr.Name)

在Index.cshtml类

但是现在我收到了一个错误:

  

无效的对象名称dbo.Authors。

我的表名为Author,我不知道为什么会找Authors

我应该更改哪些内容才能显示普通名称,而不是Author

的ID

2 个答案:

答案 0 :(得分:0)

将您的forign键列更改为AuthorId,并将forign键导航属性从Authorr更改为Author

public class Book
{
    public int Id { get; set; }
    public int AuthorId { get; set; }
    public string Title { get; set; }        
    public virtual Author Author { get; set; }
}

现在在你看来你可以做到

@Html.DisplayFor(modelItem => item.Author.Name)

同样,当您获得数据时,您可以使用Include方法加载作者数据。

var books = yourDbContext.Books.Include("Author").ToList();
return View(books);

答案 1 :(得分:0)

共有4个问题。

1问题在这里:

dbo.Books (int Id(PK), 
nvarchar(50) Title, 
int Author(foreignkey) //Wrong)

应该是

  dbo.Books (int Id(PK), 
    nvarchar(50) Title, 
    int AuthorId)

1问题在这里:

dbo.Author //Wrong
(int ID(PK), nvarchar(50) Name)

应该是

dbo.Authors (int ID(PK), nvarchar(50) Name)

2问题在这里:

 public class Book
    {
        public int Id { get; set; }
        public int Author { get; set; } //Wrong
        public string Title { get; set; }
        [ForeignKey("Author")]
        public virtual Author Authorr { get; set; } //Wrong
    }

您应该如下所示进行更改。

public class Book
{
    public int Id { get; set; }
    public string Title { get; set; }

    [ForeignKey("Author")]
    public virtual Author Author { get; set; } 
    public int AuthorId { get; set; }
}

我强烈建议您按照Getting Started with ASP.NET MVC 5文章系列学习 ASP.net MVC 5