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

时间:2015-01-16 09:33:09

标签: c# asp.net-mvc entity-framework

我的模型类就像这样

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的字段,因为它将充当表中的外键然后,我不想要。我对Departments的使用仅用于展示目的。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:2)

使用ViewModel。 View Model是专门用于将数据从控制器发送到View的类。它不是您在Entity框架中使用的实体。它可以包含实体,实体列表,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中显示它们。我还没有测试过代码。

答案 1 :(得分:2)

尝试这样,纯粹的html + Razor suntax

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

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