Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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
C# 仅在MVC 5、EF 6中获取用于显示的数据_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

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文件夹或使用模型。