我使用.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 --")
希望这能帮助你找到一个可行的解决方案。