【问题标题】:How to select values in a multiple DropDownList using DropdownListFor in MVC 5如何在 MVC 5 中使用 DropdownListFor 在多个 DropDownList 中选择值
【发布时间】:2019-04-30 22:35:41
【问题描述】:

我有这个模型:

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 的视图,该 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。

我怎样才能做到这一点?

谢谢 詹姆

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-5 razor-2 dropdownlistfor


    【解决方案1】:

    为了使用带有multiple="multiple"属性的&lt;select&gt;元素,你需要声明List&lt;string&gt;属性:

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

    然后使用ListBoxFor helper 代替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&lt;int&gt; CamposId可以根据数据库中的实际ID数据类型试一试。

    【讨论】:

    • 谢谢.. 我只将属性类型更改为 List 并改用 ListBoxFor 并且它有效。它会自动选择元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多