Asp.net mvc 如何在MVC4 Razor中使用CheckBoxList和DropdownList

Asp.net mvc 如何在MVC4 Razor中使用CheckBoxList和DropdownList,asp.net-mvc,asp.net-mvc-4,razor,html-helper,checkboxlist,Asp.net Mvc,Asp.net Mvc 4,Razor,Html Helper,Checkboxlist,我必须使用@Html.CheckBoxListFor或@Html.DropdownListFor。当我使用List进行模型绑定时,我对如何在视图中使用这些helper类感到困惑 将列表绑定到CheckBoxList和DropdownList中最正确、最简单的方法是什么 在型号中: public class SampleViewModel { public IEnumerable<Responsible> AvailableResponsibles { get;

我必须使用@Html.CheckBoxListFor或@Html.DropdownListFor。当我使用List进行模型绑定时,我对如何在视图中使用这些helper类感到困惑

将列表绑定到CheckBoxList和DropdownList中最正确、最简单的方法是什么

在型号中:

public class SampleViewModel
    {
        public IEnumerable<Responsible> AvailableResponsibles { get; set; }
        public IEnumerable<Responsible> SelectedResponsibles { get; set; }
        public PostedResponsibles PostedResponsibles { get; set; }
        Responsible objResponsible = new Responsible();
        public SampleViewModel GetResponsiblesInitialModel()
        {
            //setup properties
            var model = new SampleViewModel();
            var selectedResponsibles = new List<Responsible>();

            //setup a view model
            model.AvailableResponsibles = objResponsible.GetAll().ToList();
            model.SelectedResponsibles = selectedResponsibles;
            return model;
        }
    }
public class Responsible
    {
        //Integer value of a checkbox
        public int Id { get; set; }

        //String name of a checkbox
        public string Name { get; set; }

        //Boolean value to select a checkbox
        //on the list
        public bool IsSelected { get; set; }

        //Object of html tags to be applied
        //to checkbox, e.g.:'new{tagName = "tagValue"}'
        public object Tags { get; set; }

        public IEnumerable<Responsible> GetAll()
        {
            return new List<Responsible> {
                              new Responsible {Name = "Apple", Id = 1 },
                              new Responsible {Name = "Banana", Id = 2},
                              new Responsible {Name = "Cherry", Id = 3},
                              new Responsible {Name = "Pineapple", Id = 4},
                              new Responsible {Name = "Grape", Id = 5},
                              new Responsible {Name = "Guava", Id = 6},
                              new Responsible {Name = "Mango", Id = 7}
                            };
        }

    }

    public class PostedResponsibles
    {
        //this array will be used to POST values from the form to the controller
        public string[] ResponsibleIds { get; set; }
    }
<tr>
                <td>
                    @Html.LabelFor(model=>model.Responsible)
                </td>
                <td>
                  @Html.CheckBoxListFor(model => model.PostedResponsibles.ResponsibleIds,
                                  model => model.AvailableResponsibles,
                                  Responsible => Responsible.Id,
                                  Responsible => Responsible.Name,
                                  model => model.SelectedResponsibles)

                </td>
            </tr>
公共类SampleViewModel
{
公共IEnumerable可用责任{get;set;}
公共IEnumerable SelectedResponsibles{get;set;}
公共PostedResponsibles PostedResponsibles{get;set;}
Responsible objResponsible=新Responsible();
public SampleViewModel GetResponsiblesInitialModel()
{
//设置属性
var模型=新的SampleViewModel();
var selectedResponsibles=new List();
//设置视图模型
model.AvailableResponsibles=objResponsible.GetAll().ToList();
model.SelectedResponsibles=SelectedResponsibles;
收益模型;
}
}
公共课负责人
{
//复选框的整数值
公共int Id{get;set;}
//复选框的字符串名称
公共字符串名称{get;set;}
//选择复选框的布尔值
//在名单上
公共布尔值被选为{get;set;}
//要应用的html标记的对象
//选中复选框,例如:“新建{tagName=“tagValue”}”
公共对象标记{get;set;}
公共IEnumerable GetAll()
{
返回新列表{
新负责人{Name=“Apple”,Id=1},
新的负责人{Name=“Banana”,Id=2},
新的负责人{Name=“Cherry”,Id=3},
新的负责人{Name=“菠萝”,Id=4},
新负责人{Name=“Grape”,Id=5},
新负责人{Name=“Guava”,Id=6},
新负责人{Name=“Mango”,Id=7}
};
}
}
公共类PostedResponsibles
{
//此数组将用于将值从窗体发布到控制器
公共字符串[]ResponsibleIds{get;set;}
}
视图为:

public class SampleViewModel
    {
        public IEnumerable<Responsible> AvailableResponsibles { get; set; }
        public IEnumerable<Responsible> SelectedResponsibles { get; set; }
        public PostedResponsibles PostedResponsibles { get; set; }
        Responsible objResponsible = new Responsible();
        public SampleViewModel GetResponsiblesInitialModel()
        {
            //setup properties
            var model = new SampleViewModel();
            var selectedResponsibles = new List<Responsible>();

            //setup a view model
            model.AvailableResponsibles = objResponsible.GetAll().ToList();
            model.SelectedResponsibles = selectedResponsibles;
            return model;
        }
    }
public class Responsible
    {
        //Integer value of a checkbox
        public int Id { get; set; }

        //String name of a checkbox
        public string Name { get; set; }

        //Boolean value to select a checkbox
        //on the list
        public bool IsSelected { get; set; }

        //Object of html tags to be applied
        //to checkbox, e.g.:'new{tagName = "tagValue"}'
        public object Tags { get; set; }

        public IEnumerable<Responsible> GetAll()
        {
            return new List<Responsible> {
                              new Responsible {Name = "Apple", Id = 1 },
                              new Responsible {Name = "Banana", Id = 2},
                              new Responsible {Name = "Cherry", Id = 3},
                              new Responsible {Name = "Pineapple", Id = 4},
                              new Responsible {Name = "Grape", Id = 5},
                              new Responsible {Name = "Guava", Id = 6},
                              new Responsible {Name = "Mango", Id = 7}
                            };
        }

    }

    public class PostedResponsibles
    {
        //this array will be used to POST values from the form to the controller
        public string[] ResponsibleIds { get; set; }
    }
<tr>
                <td>
                    @Html.LabelFor(model=>model.Responsible)
                </td>
                <td>
                  @Html.CheckBoxListFor(model => model.PostedResponsibles.ResponsibleIds,
                                  model => model.AvailableResponsibles,
                                  Responsible => Responsible.Id,
                                  Responsible => Responsible.Name,
                                  model => model.SelectedResponsibles)

                </td>
            </tr>

@LabelFor(model=>model.Responsible)
@Html.CheckBoxListFor(model=>model.PostedResponsibles.ResponsibleIds,
model=>model.AvailableResponsibles,
Responsible=>Responsible.Id,
Responsible=>Responsible.Name,
模型=>model.SelectedResponsibles)

目前我正在使用Nuget Packege,但它有点混乱,很难使用。建议我使用任何其他方法来实现此目的。

这取决于您的UI要求。如果你需要一个下拉列表,那么使用它

CheckBoxList不是现成的帮助程序,它是一个自定义帮助程序

您可以从这里找到帮助器(复选框列表)的更多详细信息

关于下拉列表,请参阅。它可以以多种方式重载

这是可用的

  • 使用软件包管理器安装软件包

    安装程序包MvcCheckBoxList
    
  • 添加水果.cs

    namespace CheckBoxListForApp.Models
    {
    公共级水果
    {
    公共int Id{get;set;}
    公共字符串名称{get;set;}
    公共布尔值被选为{get;set;}
    公共对象标记{get;set;}
    }
    }
    
  • 添加水果视图模型.cs

    使用System.Collections.Generic;
    命名空间CheckBoxListForApp.Models
    {
    公共类模型
    {
    public IEnumerable AvailableFruits{get;set;}
    公共IEnumerable SelectedFruits{get;set;}
    公共PostedFruits PostedFruits{get;set;}
    }
    }
    
  • 添加PostedFruits.cs

    namespace CheckBoxListForApp.Models
    {
    /// 
    ///用于帮助器类,使回发选定值更容易
    /// 
    公营邮品
    {
    //此数组将用于将值从窗体发布到控制器
    公共字符串[]水果ID{get;set;}
    }
    }
    
  • 添加HomeController.cs

    使用System.Collections.Generic;
    利用制度全球化;
    使用System.Linq;
    使用System.Web.Mvc;
    使用CheckBoxListForApp.Models;
    命名空间CheckBoxListForApp.Controllers
    {
    公共类HomeController:控制器
    {
    [HttpGet]
    公共行动结果索引()
    {
    返回视图(GetFruitsInitialModel());
    }
    [HttpPost]
    公共行动结果指数(PostedFruits PostedFruits)
    {
    返回视图(GetFruitsModel(postedFruits));
    }
    私有水果视图模型GetFruitsModel(PostedFruits PostedFruits)
    {
    var模型=新的水果视图模型();
    var selectedFruits=新列表();
    var postedfructids=新字符串[0];
    如果(postedFriences==null)postedFriences=new postedFriences();
    //如果存在已发布ID的视图模型数组
    //并且不为空,请保存所选ID
    if(postedFruits.FruitIds!=null&&postedFruits.FruitIds.Any())
    {
    postedFruitIds=PostedFruitis.FruitIds;
    }
    //如果保存了任何选定的ID,请创建水果列表
    if(postedFruitIds.Any())
    {
    selectedFruits=FruitRepository.GetAll()
    .Where(x=>postedfructId.Any(s=>x.Id.ToString().Equals(s)))
    .ToList();
    }
    model.AvailableFruits=FruitRepository.GetAll().ToList();
    model.SelectedFruits=SelectedFruits;
    M