asp.net-mvc - 使用模型绑定(bind)从 MVC 4 中的 List<T> 中选择项目

标签 asp.net-mvc asp.net-mvc-4 model-binding

给定一个类(class)

public class Person
{
    // Some general properties

    public List<Hobby> Hobbies { get; set; }
}

public class Hobby
{
    // Some properties e.g. Name, etc.
}

static List<Hobby> AllHobbies { get; }

是否可以创建一个允许用户使用模型绑定(bind)来选择他的爱好的 View ?

在 View 中循环通过AllHobbies 肯定是可能的。并渲染 <input type="checkbox" />对于每个,然后在回发 Controller 中手动连接选定的值。似乎这应该可以通过模型绑定(bind)来实现,但我不知道如何。

最佳答案

当然,我建议您使用编辑器模板。

让我们假设一个爱好有一个名称和一个 bool 字段,指示它是否被用户选择:

public class Hobby
{
    public string Name { get; set; }
    public bool Selected { get; set; }
}

然后一个 Controller 将模型输入 View 并处理表单提交:
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var person = new Person
        {
            Hobbies = new[]
            {
                new Hobby { Name = "hobby 1" },
                new Hobby { Name = "hobby 2", Selected = true },
                new Hobby { Name = "hobby 3" },
            }.ToList()
        };
        return View(person);
    }

    [HttpPost]
    public ActionResult Index(Person person)
    {
        var selectedHobbies = person
            .Hobbies
            .Where(x => x.Selected).Select(x => x.Name);
        string message = string.Join(",", selectedHobbies);
        return Content("Thank you for selecting: " + message);
    }
}

然后是一个包含允许用户选择爱好的表单的 View :
@model Person

@using (Html.BeginForm()) 
{
    <h2>Hobbies</h2>
    @Html.EditorFor(x => x.Hobbies)
    <button type="submit">OK</button>
}

和一个相应的编辑器模板,它将为 Hobbies 的每个元素自动呈现集合(~/Views/Home/EditorTemplates/Hobby.cshtml -> 注意模板的名称和位置很重要):
@model Hobby

<div>
    @Html.LabelFor(x => x.Selected, Model.Name)
    @Html.HiddenFor(x => x.Name)
    @Html.CheckBoxFor(x => x.Selected)
</div>

对于更高级的编辑场景,我建议您通过 Steven Sanderson 的 blog post关于这个话题。

关于asp.net-mvc - 使用模型绑定(bind)从 MVC 4 中的 List<T> 中选择项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10984727/

相关文章:

asp.net-mvc - 在 MVC 中编辑 View 模型的更好方法

c# - javascript 无法访问背景

c# - 如何将 Kendo UI Grid 与 ToDataSourceResult()、IQueryable<T>、ViewModel 和 AutoMapper 一起使用?

c# - MVC 4 Web Api Controller 没有默认构造函数?

c# - 从 .Net (mvc) 中的 View 按钮调用 Controller 方法的最简单方法

c# - 如何覆盖 ASP.NET MVC 3 默认模型绑定(bind)器以在模型创建期间解决依赖关系(使用 ninject)?

css - MVC 中 CSS 和 View 的转换

javascript - JQuery:从 foreach 读取选定的 razor(@item.Id)。

c# - 如何在同一项目中使用 MVC Controller 和 WebAPI Controller

wpf - 在 WPF 中使用命令