C# 仅在MVC 5、EF 6中获取用于显示的数据
我的模型课是这样的C# 仅在MVC 5、EF 6中获取用于显示的数据,c#,asp.net-mvc,entity-framework,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 Procedur
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
的字段,因为它将作为表中的外键,我不想这样做。我在部门的使用仅用于展示目的。我怎样才能做到这一点呢?使用。视图模型是专门用来将数据从控制器发送到视图的类。它不是您在实体框架中使用的实体。它可以包含实体、实体列表、SelectList对象以及您需要的任何组合。它还具有静态类型的优点(与ViewBag不同)
在视图中
@Html.DropDownListFor(model => model.SelectedProducerID, Model.Producers, ...)
我不知道您想如何显示部门,但您可以循环浏览它们并在html中显示它们。我还没有测试代码。请使用。视图模型是专门用来将数据从控制器发送到视图的类。它不是您在实体框架中使用的实体。它可以包含实体、实体列表、SelectList对象以及您需要的任何组合。它还具有静态类型的优点(与ViewBag不同)
在视图中
@Html.DropDownListFor(model => model.SelectedProducerID, Model.Producers, ...)
我不知道您想如何显示部门,但您可以循环浏览它们并在html中显示它们。我还没有测试过代码。像这样试试,纯html+Tax
<select name="departments">
@for (var i = 0; i < model.Departments ; i++){
<option>@(model.Departments[i])</option>
}
</select>
@对于(var i=0;i
像这样试试,纯html+Razor suntax
<select name="departments">
@for (var i = 0; i < model.Departments ; i++){
<option>@(model.Departments[i])</option>
}
</select>
@对于(var i=0;i
您将遇到下拉列表代码的问题,您在ViewBag(过程ID)中使用与模型相同的名称,但当您回发数据时,它们是不同的类型(一个是SelectList,另一个是Int),您会遇到问题。@StephenMuecke除了视图模型没有其他方法吗?使用视图模型将解决Erik提出的问题,并为您带来许多其他好处(例如验证属性),但如果您不绑定任何内容,您可以根据ViewBag属性创建下拉列表-ViewBag.NotBoundProperty=new SelectList(…)
和@Html.DropDownList(“NotBoundProperty”…)
@StephenMuecke我还没有完全理解你的评论。你能在这里添加更多细节作为答案吗?如果你在下拉列表代码中遇到问题,你在ViewBag(ProcedureID)中使用的名称与你的模型相同,但是当你回发数据时,它们是不同的类型(一个是SelectList,另一个是Int),您会遇到问题。@StephenMuecke除了视图模型没有其他方法吗?使用视图模型将解决Erik提出的问题,并为您带来许多其他好处(例如验证属性),但如果您不绑定任何内容,您可以根据ViewBag属性创建下拉列表-ViewBag.NotBoundProperty=new SelectList(…)
和@Html.DropDownList(“NotBoundProperty”…)
@StephenMuecke我还没有完全理解你的评论。你能把它作为一个更详细的答案添加到这里吗?请提供一个示例代码,说明如何实现这一点。还有一个问题。是否有需要创建viewmodel的特定文件夹?比如在模型文件夹里还是别的什么?它有命名约定吗?在控制器中,我需要在哪个动作中编写代码?我想是在Create中。无论你要求什么行动。create的后期版本接受CreateViewModel作为参数。ViewModels没有特定的文件夹。创建ViewModels文件夹或使用Models。请提供如何实现此目标的示例代码。还有一个问题。是否有需要创建viewmodel的特定文件夹?比如在模型文件夹里还是别的什么?它有命名约定吗?在控制器中,我需要在哪个动作中编写代码?我想是在Create中。无论你要求什么行动。create的后期版本接受CreateViewModel作为参数。ViewModels没有特定的文件夹。创建ViewModels文件夹或使用模型。