代码之家  ›  专栏  ›  技术社区  ›  jstuardo

如何使用MVC 5中的DropDownList来选择多个DropDownList中的值

  •  1
  • jstuardo  · 技术社区  · 6 年前

    我有这个模型:

    public class CampoTipoDocumentoViewModel
    {
        public int TipoDocumentoId { get; set; }
    
        public string[] CamposId { get; set; }
    
        private List<MiddleTier.Models.ICampo> _todosCampos;
        public IEnumerable<SelectListItem> TodosCampos
        {
            get
            {
                foreach (var campo in _todosCampos)
                    yield return new SelectListItem { Text = campo.Nombre, Value = campo.Id.ToString() };
            }
        }  
    
        public void SetFields(List<MiddleTier.Models.ICampo> campos)
        {
            _todosCampos = campos;
        }
    }
    

    在Controller中,CamposID属性被分配给必须在视图中选择的元素。

    控制器还调用setfields方法,将todoscampos填充到系统中的整个记录列表中。

    这样做的目的是创建一个带有一个select的视图,这个select最初选中了一些记录。

    这是我的观点:

    @Html.DropDownListFor(m => m.CamposId, Model.TodosCampos, new { @class = "form-control", multiple = "multiple", width = "100%" })
    

    事实上,HTML select元素是用列表创建的,但没有选择任何选项。

    例如,如果“Todoscampos”包含:

    Text = "One", Value = "1"
    Text = "Two", Value = "2"
    Text = "Three", Value = "3"
    Text = "Four", Value = "4"
    

    Camposid包含:

    Array of "2", "4"
    

    我需要视图来创建一个带有这4个选项的选择,选项2和4将被最初选中。

    我怎样才能做到这一点?

    谢谢 詹姆

    1 回复  |  直到 6 年前
        1
  •  0
  •   Tetsuya Yamamoto    6 年前

    为了使用 <select> 元素与 multiple="multiple" 属性,需要声明 List<string> 财产:

    public List<string> CamposId { get; set; }
    

    然后使用 ListBoxFor 帮助者而不是 DropDownListFor :

    @Html.ListBoxFor(m => m.CamposId, Model.TodosCampos, new { @class = "form-control", multiple = "multiple", width = "100%" })
    

    如果要设置某些默认选项值,请设置 Selected 属性转化为 SelectListItem :

    public IEnumerable<SelectListItem> TodosCampos
    {
        get
        {
            foreach (var campo in _todosCampos)
            {
                // assumed you have 'campo.IsDefault' which is boolean property 
                yield return new SelectListItem 
                { 
                    Text = campo.Nombre, 
                    Value = campo.Id.ToString(), 
                    Selected = campo.IsDefault // set default selected values
                };
            }
        }
    }  
    

    注: 通常ID属性包含整数值,您可以尝试 List<int> CamposId 取决于数据库中的实际ID数据类型。