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



我使用.NET 4.0 MVC&实体框架。从数据库中提取数据。我有桌子:

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

当我转到编辑任务分配的记录(编辑页面)时,我会得到一个表单(去掉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" }. 

假设有任务

CCD_ 1。

所以,任务分配中会有一个记录

{ 8, 12, 3 }

好吗?

让我们改一下记录,把任务交给比尔而不是约翰。因此,我会点击"编辑">按钮,在编辑页面上,我会有一个带有两个文本字段的表单([和]表示表单的文本字段)

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

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

我假设在调用数据时包含了另外两个表。如果是这样的话,你应该能够很容易地显示你需要的字段,并参考正确的字段。纯粹基于你的问题,这应该是下面的样子。

@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
});

将您带到DropDownList对于您在问题中已经提到的。

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

希望这能帮助你找到一个可行的解决方案。

最新更新