我使用.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表中。
答案 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 --")
希望这可以帮助您更多地寻找可行的解决方案。