ASP.NET MVC - 下拉列表选择 - 部分视图和模型绑定

我是ASP.NET MVC的新手,我正在努力找到最好的方法来做到这一点。这可能很简单,但我只是想做正确的事情所以我想我会问。 让我们说我的模型是这样的: 任务 - ID,描述,AssignedStaffMember StaffMember - Id,FirstName,LastName 在我看来,我想创建一个新任务。我创建了一个强类型的Razor视图,并且可以使用EditorFor为Description创建文本框但是AssignedStaffMember呢? 我想要一个当前所有员工的下拉列表,并且可以选择一个,然后将其提交给一个动作方法
NewTask(string description, StaffMember assignedStaffMember)
或者我可以为staffId而不是StaffMember对象使用int,并在action方法中查找它。 做这个的最好方式是什么?我需要去数据库以获取员工名单,所以这就是我的想法: 对员工下拉列表进行局部查看,将使用几次并使用
@Html.Action("ListStaff", "Staff")
来调用它。然后动作方法有
public ActionResult ListStaff()
{
    IEnumerable<StaffMember> model = _serviceLayer.GetAllStaff();
    return PartialView(model);
}
但是我不确定它如何与模型绑定一起工作,我的理解是它必须有正确的名称才能提交表单,我需要将名称传递给局部视图以放置元素我猜? 不要让它调用控制器来获取工作人员,而是创建一个包含我的Task和IEnumerable possibleStaff集合的ViewModel。可能会将此信息发送到局部视图。 一个Html助手? 编辑器可以以某种方式使用? 哪一个(或者更多)最好?以及如何进行模型绑定?     
已邀请:
这是一种方法。创建TaskDetailsViewModel
public class TaskDetailsViewModel
{
    public TaskDetailsViewModel()
    {
        this.Task = new Task();
        this.StaffMembers = new List<StaffMember>();
    }

    public Task Task { get; set; }
    public IEnumerable<StaffMember> StaffMembers { get; set; }
}
在控制器中
public ActionResult Edit(int id)
{
    var task = taskRepository.GetTaskByID(id);

    var taskDetailsViewModel = new TaskDetailsViewModel();

    // Populate taskDetailsViewModel from task and staff

    return View(taskDetailsViewModel);
}

[HttpPost]
public ActionResult Edit(TaskDetailsViewModel taskDetailsViewModel)
{
    if (ModelState.IsValid)
    {
        taskRepository.Save(taskDetailsViewModel.Task);
    }
    else
    {
        // Show Error
    }

    return View(taskDetailsViewModel);
}
在视图中(强烈绑定到TaskDetailsViewModel)
@Html.DropDownListFor(model => model.Task.AssignedStaffMember, new SelectList(Model.StaffMembers, "ID", "FirstName", Model.Task.AssignedStaffMember))
@Html.ValidationMessageFor(model => model.Task.AssignedStaffMember)
    

要回复问题请先登录注册