Как выбрать значения в нескольких DropDownList с помощью DropdownListFor в MVC 5 - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть эта модель:

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"

Мне нужно представление, чтобы создать SELECT с этими 4 опциями, и опции 2 и 4, которые будут изначально выбраны.

Как мне этого добиться?

Спасибо, Хайме

1 Ответ

0 голосов
/ 29 ноября 2018

Чтобы использовать элемент <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 в базе данных.

...