【问题标题】:How to get Select items from Controller?如何从 Controller 中获取 Select 项目?
【发布时间】:2015-12-17 13:53:38
【问题描述】:

我对此完全陌生。所以我跟着here的教程。

到目前为止它正在运行,但我想知道如何使用现有作者创建新书。

我的 Book-Model 如下:

public class Book
{
  [ScaffoldColumn(false)]
  public int BookID { get; set; }
  [Required]
  public string Title { get; set; }

  public int Year { get; set; }
  [Range(1, 500)]
  public decimal Price { get; set; }

  public string Genre { get; set; }

  [ScaffoldColumn(false)]
  public int AuthorID { get; set; }

  // Navigation property
  public virtual Author Author { get; set; }
}

AuthorID 将指向Author.AuthorID,如下所示:

public class Author
{
  [ScaffoldColumn(false)]
  public int AuthorID { get; set; }
  [Required]
  [Display(Name = "Last Name")]
  public string LastName { get; set; }

  [Display(Name = "First Name")]
  public string FirstMidName { get; set; }

  public virtual ICollection<Book> Books { get; set; }
}

在我的BooksController 中如下:

public IActionResult Create()
{
  ViewData["AuthorID"] = new SelectList(_context.Author, "AuthorID", "Author");
  return View();
}

但是我怎样才能在我的Create.cshtml 中使用这个ViewData["AuthorID"] 作为Form Select Options

【问题讨论】:

  • 您需要提供更多上下文。 Book 的模型是什么?您要将所选作者绑定到的 Book 的属性是什么?

标签: asp.net-mvc model-view-controller razor


【解决方案1】:

有两种方法

解决方案 1

-保持控制器代码不变

@Html.DropDownListFor( i => i.AuthorID, 
     (IEnumerable<SelectListItem>) ViewData["AuthorID"]);

虽然最好将 ViewData 中的键名从 AuthorID 改为 AuthorList

解决方案 2

public IActionResult Create()
{
  ViewData["AuthorID"] = _context.Author;
  return View();
}

@Html.DropDownListFor( i => i.AuthorID, 
    new SelectList((IEnumerable) ViewData["AuthorID"], "AuthorID", "Author"))

建议

另外我建议创建一个新类并将其用作 ViewModel,因此您可以使用该类属性来代替在 ViewData 中设置数据,例如

public class BooKViewModel
{
   Public IEnumerable<Author> AuthorsList {get;set;}
}

然后

public IActionResult Create()
{
  var viewModel = new BookViewModel();
  viewModel.AuthorsList = _context.Author;
  return View(viewModel);
}

【讨论】:

  • i.AuthorRef 指的是什么?尝试 解决方案 1 时,我收到了 NullException(使用 i.AuthorID
  • Book实体中的fk字段,我假设是AuthorRef
  • 我只有AuthorID或虚拟Author,但都没有设置为fk。
  • @chrosey 根据您编辑的问题我已经更改了答案
  • 所以我终于设法完成了目标,感谢您的帮助。解决方案2为我做了。但我无法尝试您的建议,因为另一个例外。页面等待 BookModel 而不是 BookViewModel。有没有机会绕过这个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
相关资源
最近更新 更多