我对 ASP.NET MVC 相当陌生,并且正在尝试找出最好的方法来做到这一点。这可能很简单,但我只想正确地做事,所以我想我会问。
可以说我有一个模型是这样的:
任务 - ID、描述、AssignedStaffMember
StaffMember - ID、名字、姓氏
在我看来,我想创建一个新任务。我制作了一个强类型的 Razor View ,并且可以使用 EditorFor 为描述创建文本框,但是 AssignedStaffMember 呢?
我想要一个所有当前员工的下拉列表,并可以选择一个,然后将其提交给一个操作方法,该方法是NewTask(string description, StaffMember assignedStaffMember)
或者我可以有一个 int 的 StaffId 而不是 StaffMember 对象,并在 action 方法中查找它。
做这个的最好方式是什么?我需要去数据库获取员工名单,所以这就是我的想法:
@Html.Action("ListStaff", "Staff")
调用它。 Action 方法然后有public ActionResult ListStaff()
{
IEnumerable<StaffMember> model = _serviceLayer.GetAllStaff();
return PartialView(model);
}
但是我不确定这将如何与模型绑定(bind)一起使用,我的理解是它必须具有正确的名称才能提交表单,我需要将名称传递给局部 View 以放置在元素上我猜?
哪一个(或更多)最好?我将如何进行模型绑定(bind)?
最佳答案
这是执行此操作的一种方法。创建一个 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; }
}
在 Controller 中
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);
}
在 View 中(强烈绑定(bind)到 TaskDetailsViewModel)
@Html.DropDownListFor(model => model.Task.AssignedStaffMember, new SelectList(Model.StaffMembers, "ID", "FirstName", Model.Task.AssignedStaffMember))
@Html.ValidationMessageFor(model => model.Task.AssignedStaffMember)
关于asp.net-mvc - ASP.NET MVC - 下拉列表选择 - 部分 View 和模型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188563/