ASP.NET MVC - 下拉列表选择 - 部分视图和模型绑定 [英] ASP.NET MVC - drop down list selection - partial views and model binding

查看:31
本文介绍了ASP.NET MVC - 下拉列表选择 - 部分视图和模型绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm fairly new to ASP.NET MVC and am trying to work out the best way to do this. It's probably simple but I just want to do things correctly so I thought I'd ask.

假设我有一个这样的模型:

Lets say I have a model that is this:

任务 - Id、描述、分配的员工

Task - Id, Description, AssignedStaffMember

员工成员 - 身份证、名字、姓氏

StaffMember - Id, FirstName, LastName

在我看来,我想创建一个新任务.我创建了一个强类型的 Razor 视图,并且可以使用 EditorFor 为 Description 创建文本框,但是 AssignedStaffMember 呢?

and in my view I want to create a new task. I make a strongly typed Razor view, and can use EditorFor to create textboxes for Description but what about AssignedStaffMember?

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

I want a drop down list of all current staff and have the option of selecting one, then this gets submitted to an action method which is NewTask(string description, StaffMember assignedStaffMember) either that or I could have an int for staffId instead of the StaffMember object and look it up in the action method.

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

What is the best way to do this? I need to go to the database to get the list off staff, so here's what I thought:

  1. 制作人员列表下拉的局部视图,会用到几次,使用@Html.Action("ListStaff", "Staff")调用.动作方法然后有

public ActionResult ListStaff()
{
    IEnumerable<StaffMember> model = _serviceLayer.GetAllStaff();
    return PartialView(model);
}

但是我不确定这将如何与模型绑定一起工作,我的理解是它必须具有正确的表单名称才能提交它,我需要将名称传递给局部视图以放置在我猜的元素上?

However I'm not sure on how this will work with model binding, my understanding is that it has to have the correct name for the form to submit it, I'd need to pass the name to the partial view to put on the element I guess?

与其调用控制器来获取人员,不如创建一个包含我的 Task 和一个 IEnumerable possibleStaff 集合的 ViewModel.可能将此信息发送到局部视图.

Instead of having it call a controller to get the staff, make a ViewModel that contains my Task and a IEnumerable possibleStaff collection. possibly send this information to a partial view.

一个 Html 助手?

a Html Helper ?

EditorFor 可以以某种方式使用吗?

EditorFor could somehow be used?

哪一个(或者还有更多)最好?我将如何进行模型绑定?

which one (or is there more) would be best? and how would I do the model binding?

推荐答案

这是一种方法.创建一个 TaskDetailsViewModel

Here is one way to do this. Create a 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)

In View (bound strongly to 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 - 下拉列表选择 - 部分视图和模型绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆