asp.net-mvc - ASP.NET MVC - 下拉列表选择 - 部分 View 和模型绑定(bind)

标签 asp.net-mvc razor partial-views model-binding

我对 ASP.NET MVC 相当陌生,并且正在尝试找出最好的方法来做到这一点。这可能很简单,但我只想正确地做事,所以我想我会问。

可以说我有一个模型是这样的:

任务 - ID、描述、AssignedStaffMember

StaffMember - ID、名字、姓氏

在我看来,我想创建一个新任务。我制作了一个强类型的 Razor View ,并且可以使用 EditorFor 为描述创建文本框,但是 AssignedStaffMember 呢?

我想要一个所有当前员工的下拉列表,并可以选择一个,然后将其提交给一个操作方法,该方法是NewTask(string description, StaffMember assignedStaffMember)或者我可以有一个 int 的 StaffId 而不是 StaffMember 对象,并在 action 方法中查找它。

做这个的最好方式是什么?我需要去数据库获取员工名单,所以这就是我的想法:

  • 对人员下拉列表做局部 View ,会用到几次,使用@Html.Action("ListStaff", "Staff")调用它。 Action 方法然后有
    public ActionResult ListStaff()
    {
        IEnumerable<StaffMember> model = _serviceLayer.GetAllStaff();
        return PartialView(model);
    }
    

    但是我不确定这将如何与模型绑定(bind)一起使用,我的理解是它必须具有正确的名称才能提交表单,我需要将名称传递给局部 View 以放置在元素上我猜?
  • 与其调用 Controller 来获取人员,不如创建一个包含我的 Task 和 IEnumerable possibleStaff 集合的 ViewModel。可能将此信息发送到局部 View 。
  • 一个 HTML 助手?
  • EditorFor 可以以某种方式使用吗?

  • 哪一个(或更多)最好?我将如何进行模型绑定(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/

    相关文章:

    c# - 如何在 MVC4 中使用所有查询字符串和哈希重定向移动设备?

    javascript - 从 mvc.net 获取 AngularJS http 中使用的 url 的可靠方法是什么?

    javascript - MVC - 在 jquery 中读取模型变量

    asp.net-mvc-2 - 为什么 ValidationMessageFor 在这种情况下不显示我的验证消息?

    ruby-on-rails - 在 Rails 中将部分从一个 Controller 的 View 渲染到另一个 Controller 的 View

    html - 如何将文本环绕在局部

    C# - 从资源中读取和显示 HTML

    asp.net-mvc - Asp.Net MVC - 模型绑定(bind)到模型或 ViewModel

    c# - 如何在razor引擎中的@var后面添加字符串(ASP MVC)

    c# - 如何使用 MVC 4 应用程序运行 Asp.net Webforms 网站