2016-06-08 66 views
1

我使用.NET 4.0 MVC &实体框架创建了一个简单的任务Web应用程序。从数据库中提取数据。 我有表:用下拉列表替换表单文本字段

Staff {PkId, FirstName, LastName} 
Tasks {PkId, Task, TaskDescription, DueDate} 
TasksAssigned {PkId, StaffId, TaskId} 

当我去编辑TasksAssigned记录(编辑页)我会得到一个形式(空间剥离DIV/CSS)

@Html.LabelFor(model => model.PkId) 
@Html.EditorFor(model => model.PkId) 

@Html.LabelFor(model => model.StaffId) 
@Html.EditorFor(model => model.StaffId) 

@Html.LabelFor(model => model.TaskId) 
@Html.EditorFor(model => model.TaskId) 

但我需要显示Task代替TaskId,而LastName代替StaffId。我需要的是在表单中包含所有名称和所有可用任务的文本字段中的下拉列表,以便我可以选择其他人或其他任务(或两者)。

我假设我应该使用DropDownList()或DropDownListFor()?

感谢您的任何帮助。

(插件) 让我试着更好地解释...... 所以,我们说,有工作人员:

{ 12, "John", "Dow" }, 
{ 15, "Bill", "Smith" }. 

比方说有任务

{ 3, "Clean the printer", "Call company to clean the printer... ", "2016-06-25" }

所以,还有的要在TaskAssigned

{ 8, 12, 3 } 

OK了记录?

让我们改变记录,以便将任务分配给Bill而不是John。所以,我会点击“编辑”按钮和编辑页面上我有两个文本字段([和]代表形式的文本字段)

职员形式:约翰·道 任务:清洁打印机

要更改它,我必须用15替换名称,比尔的ID,对不对?我想要一个名为John和Bill的下拉列表,然后选择Bill的名字,提交时Bill的ID将存储在TasksAssigned表中。

+0

你的问题太含糊。你能缩小你的问题吗? – Win

+0

我知道:( 我试了一下问题的底部(插件) – Afan

回答

1

我假设你在调用你的数据时包含了另外两个表。如果是这样,你应该能够很容易地显示你需要的参照正确的领域。纯粹基于你的问题,这应该看起来像下面的东西。

@Html.HiddenFor(model => model.TaskId) 

@Html.LabelFor(model => model.Tasks.Task) 
@Html.EditorFor(model => model.Tasks.Task) 

@Html.LabelFor(model => model.Staff.LastName) 
@Html.EditorFor(model => model.Staff.LastName) 

我没有看到立即需要显示或者甚至提供编辑TaskAssigned条目的PK值的选项。这就是我将它移动到隐藏的原因

如果你想给用户一个下拉列表,你必须确保你在你的模型中发送了潜在的选择。在这种情况下,您最好希望使用ViewModel发送选项。

这样你就可以做到像下面这样的东西。

List<SelectListItem> listOfStaff = new List<SelectListItem>(); 
    listOfStaff.Add(new SelectListItem 
     { 
      Text = "Mark", 
      Value = "1" 
     }); 
    listOfStaff.Add(new SelectListItem 
     { 
      Text = "John", 
      Value = "2", 
      Selected = true 
     }); 

引导你到DropDownListFor你已经在你的问题中引用。

@Html.DropDownListFor(model => model.StaffId, model.listOfStaff, "-- Select Staffmember --") 

希望这可以帮助您更多地了解工作解决方案。

+0

嗨Zephire, 是的,所有三个表都包含在内,代码块中的代码是正确的。因为我做了同样的事情。:-) 而且,关于下拉列表,我很抱歉如果我问愚蠢的问题 - 我是.NET新手,我无法使用已包含的表格员工显示列表的记录? – Afan

+0

嗨@Afan很好听!您可以使用您的结果模型中已有的唯一名称生成“DropdownListFor”。然而,**小心**,当你这样做时,你只会有已经分配给任务的名字。从未分配任务的人员不会出现在TasksAssigned表中,因此包含将不会将其包含在您正在使用的Model中。解决这个问题的建议是根据TasksAssigned模型创建一个ViewModel,但包含一个List listOfStaff,您可以通过从Staff表中获取所有数据来填充它。 – Zephire

+0

嗨@Afan你在这边工作吗?如果是这样,请将答案标记为解决方案。谢谢。 – Zephire