使用下拉列表替换表单文本字段

时间:2016-06-08 20:15:12

标签: asp.net-mvc drop-down-menu

我使用.NET 4.0 MVC& amp;创建了一个简单的Tasks webapp。实体框架。从数据库中提取数据。 我有桌子:

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 }

好吗?

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

  

员工: John Dow   任务:清洁打印机

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

1 个答案:

答案 0 :(得分: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值的选项。这就是我把它移到Hidden

的原因

如果您想为用户提供下拉列表,您必须确保在模型中发送潜在的选择。在这种情况下,您最好希望使用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
        });

引导您进入您已在问题中引用的DropDownList。

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

希望这可以帮助您更多地寻找可行的解决方案。