如何在 MVC 5 中使用 DropdownListFor 在多个 DropDownList 中 select 值

How to select values in a multiple DropDownList using DropdownListFor in MVC 5

我有这个型号:

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;
    }
}

在控制器中,CamposId 属性 分配有必须在视图中选择的元素。

控制器还调用 SetFields 方法将 _todosCampos 填充到系统中的整个记录​​列表。

我们的想法是创建一个带有 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 个选项创建一个 SELECT 的视图,并且最初选择选项 2 和 4。

我怎样才能做到这一点?

谢谢 海梅

为了使用具有 multiple="multiple" 属性的 <select> 元素,您需要声明 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 属性包含整数值,您可以根据数据库中的实际ID数据类型尝试List<int> CamposId