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