我有这个模型`
$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);
}
它什么都没有显示
答案 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;
并保持其余代码不变。它也应该工作(虽然我不建议这样做。)