【问题标题】:Populate DropDown from database in an edit view using MVC4使用 MVC4 在编辑视图中从数据库填充 DropDown
【发布时间】:2015-07-28 19:09:35
【问题描述】:

我是 MVC 的新手,并试图在从视图模型生成的“创建”视图中填充下拉列表,但它返回一个错误,指出对象引用不是对象的实例。以下是我的代码:

控制器代码:

public ActionResult Create()
{
    return View(new AddRecipeViewModel());
}

型号代码:

public class DifficultyLevel
    {
        [Key]
        public int Id { get; set; }
        public string Difficulty { get; set; }
    }

public class AddRecipeViewModel

    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual ICollection<RecipeReview> Reviews { get; set; }
        public virtual IEnumerable<DifficultyLevel> Difficulty { get; set; }

    }

查看:

<div>
    <select>
        @foreach (var item in Model.Difficulty)
        {
            <option>@item.Difficulty</option>
        }
    </select>

</div>

有没有简单的解决方法?因为我将在此过程中添加更多下拉菜单。

谢谢, 维沙尔

【问题讨论】:

  • 我在您的代码中看不到任何填充对象的内容...您正在实例化一个对象,但其中没有任何内容...您需要调用数据库并获取值。

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


【解决方案1】:

不确定您是否需要在视图模型中使用virtual。这通常仅适用于实体模型。但无论如何,请尝试向 AddRecipeViewModel 添加一个构造函数并将集合设置为等于空列表,这样它们就不会为空。

public class AddRecipeViewModel
{
    public AddRecipeViewModel()
    {
         Reviews = new List<RecipeReview>();
         Difficulty = new List<DifficultyLevel>();
    }

    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<RecipeReview> Reviews { get; set; }
    public virtual IEnumerable<DifficultyLevel> Difficulty { get; set; }
}

【讨论】:

  • 所以这部分工作并添加了下拉列表但没有填充它。我在数据库中存储了 3 个值(简单、中等和困难),我需要在这里拉入。我需要写一些 LINQ 吗?
  • 我看不到您如何填充“难度”列表,它看起来像一个空列表@vishalvazkar
  • 我已经手动将这些值添加到数据库中,因为它们是固定值。
  • 显然你需要从数据库中检索值,如果那是它们的存储位置.. 或创建一个枚举.. 这是一个案例设计决定.. 你应该观看 Pluralsight MVC 教程了解如何使用实体框架和 mvc。 pluralsight.com/training/…
  • 我正在按照这些教程制作应用程序,但只是停留在这一步,所以我想从这里得到一些帮助。
猜你喜欢
  • 2011-08-29
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多