仅在 MVC 5、EF 6 中获取用于显示目的的数据

Get data for display purpose only in MVC 5, EF 6

我的模型class是这样的

public class Appointment
{
    public int AppointmentID { get; set; }
    public string Name { get; set; }
    public int ProcedureID { get; set; }
    public virtual Department Department { get; set; }
    public virtual Procedure Procedure { get; set; }
}

在我的控制器里

public ActionResult Create()
{
    ViewBag.ProcedureID = new SelectList(db.Procedures, "ProcedureID", "ViCode");
    return View();
}

可见

@Html.DropDownList("ProcedureID", null, new { @class = "form-control" })

这样我可以显示所有程序,但是我怎么能显示所有部门,我不想在模型中添加一个名为 DepartmentID 的字段,因为它会在 table 然后,我不想要。我对 Departments 的使用仅用于展示目的。我怎样才能做到这一点?

使用 ViewModel。 View Model 是一个 class 你专门用来将数据从 controller 发送到 View 的。它不是您在 Entity framework 中使用的实体。它可以包含实体、实体列表、SelectList 对象以及您需要的任何组合。它还具有静态类型的好处(与 ViewBag 不同)

public class CreateViewModel
{
    public SelectList Producers {get; set;}
    public List<Department> Departments {get; set;}
    public int SelectedProducerID {get; set;}
}

在控制器中

var model = new CreateViewModel
            {
               Producers = new SelectList(db.Procedures, "ProcedureID", "ViCode");
               Departments = db.Departments.ToList()
            }

return View(model);

在视图中

@Html.DropDownListFor(model => model.SelectedProducerID, Model.Producers, ...)

我不知道你想如何显示部门,但你可以循环遍历它们并在 html 中显示它们。我没有测试代码。

像这样尝试,纯净 html + Razor suntax

<select name="departments">
  @for (var i = 0; i < model.Departments ; i++){

    <option>@(model.Departments[i])</option>
  }
</select>