Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在MVC中为实体创建dropdownlist_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

Asp.net mvc 在MVC中为实体创建dropdownlist

Asp.net mvc 在MVC中为实体创建dropdownlist,asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,我是MVC新手,很难弄清楚一些基本的东西。 我有一个ViewModel,形状如下: public class ProjectViewModel { public int Id { get; set; } [Required] public string Title { get; set; } [Required] public string Description { get; set; } public DateTime CreatedDa

我是MVC新手,很难弄清楚一些基本的东西。 我有一个ViewModel,形状如下:

public class ProjectViewModel
{
    public int Id { get; set; }

    [Required]
    public string Title { get; set; }

    [Required]
    public string Description { get; set; }

    public DateTime CreatedDate { get; set; }

    [Required]
    [Display(Name = "Final due date")]
    public DateTime FinalDueDate { get; set; }

    [Required]
    [Display(Name = "Attached equipment")]
    public Equipment AttachedEquipment { get; set; }
}
在我的创建视图中,我希望能够从下拉列表中选择AttachedEquipment的值。我的数据库里有一张表,里面有所有可用的设备。 我知道有一个@Html helper@Html.dropdownlist就是为了这个目的。但是,我看不到如何从数据库中获取值并将它们输出到视图中

我的ProjectController如下所示:

private AdventureWorks db = new AdventureWorks();

// GET: Project
public ActionResult Index()
{
    return View();
}

[HttpGet]
public ActionResult Create()
{
    // I'm guessing this is where I need to do some magic
    return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ProjectViewModel model)
{
    if (ModelState.IsValid)
    {
        var project = new Project
        {
            Title =  model.Title,
            Description = model.Description,
            CreatedDate = DateTime.Now,
            FinalDueDate = model.FinalDueDate,
            Equipment = model.Equipment
        };

        db.Projects.Add(project);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(model);
}

如何将数据库中的设备值加载到“创建视图”中的下拉列表中?

由于无法将下拉列表绑定到复杂对象附件设备,因此我将更改视图模型,以包含所选设备的属性和选项的选择列表

public class ProjectViewModel
{
  public int Id { get; set; }
  [Required]
  public string Title { get; set; }
  [Required]
  public string Description { get; set; }
  public DateTime CreatedDate { get; set; }
  [Required]
  [Display(Name = "Final due date")]
  public DateTime FinalDueDate { get; set; }
  [Required(ErrorMessage="Please select equipment)]
  public int? SelectedEquipment { get; set; }
  public SelectList EquipmentList { get; set; }
}
控制器

public ActionResult Create()
{
  ProjectViewModel model = new ProjectViewModel();
  // Assumes your Equipments class has properties ID and Name
  model.EquipmentList = new SelectList(db.Equipments, "ID", "Name");
  return View(model);
}
看法


或者,您可以绑定到m=>m.AttachedEquipment.ID,假设设备包含属性ID

可能与@MarkShevchenko重复,好的,我得到了给出的示例。但这是否意味着我将始终必须找到与所选值匹配的DB条目?是的,您将。使用EF很简单,但仍然很乏味。通常,此逻辑位于帮助器类和方法中。在简单的应用程序中,您可以直接在模型中执行此操作。在复杂的应用程序中,最好将此逻辑推到单独的层中,请参见。
@model ProjectViewModel
@using(Html.BeginForm())
{
  ....
  @Html.DropDownListFor(m => m.SelectedEquipment, Model.EquipmentList, "--Please select--")
  ....
}