显示来自另一个模型的数据

时间:2017-05-21 07:38:14

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

我有这个模型`

$all_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($all_rows as $row)
{
     //do the html part & anything
}

我希望通过这个动作来显示我用来搜索“

”的作者的名字
    public int Id { get; set; }
    public string Title { get; set; }
    public int CopiesNum { get; set; }
    public int CurrentCopiesNum { get; set; )
    public Author author { get; set; }
    public int AuthorId { get; set; }

当我试图显示作者姓名

 public ActionResult SearchForBook(string BookName)
    {
        var book1 = from s in db.Books
                     select s;
        if (!string.IsNullOrEmpty(BookName))
        {
            book1 = book1.Where(c => c.Title.Contains(BookName));
        }
        ViewBag.AuthorId = new SelectList(db.Authors, "AuthorId", "Name").ToList();
        // var book = db.Books.Include(b => b.author).ToList();
        return View(book1);
    } 

它什么都没有显示

1 个答案:

答案 0 :(得分:0)

在使用Eager加载时,您需要包含Author。尝试这样的事情:

在您的控制器中 -

 var book1 = db.Books.Include(a => a.Author).ToList();

如果你想在模型中使用延迟加载

public virtual Author author { get; set; }

然后你的控制器应该工作。

<强>修改

正如您在评论部分中所说的那样,这也可以通过以下方式实现: 在你的控制器:

 var book1 = new Book();
 if (!string.IsNullOrEmpty(BookName))
    {
        book1 = _context.Books.Include(c => c.Author).SingleOrDefault(c => c.Title == "BookName");
    }

您可以简单地将book1发送到view(您应该检查book1是否包含任何内容,如果没有,则请正确处理)。

如果您真的不想改变编码方式,可以像下面那样编辑控制器:

var book1 = from s in _context.Books.Include(c => c.Author)
                    select s;

并保持其余代码不变。它也应该工作(虽然我不建议这样做。)