如何在 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
。
我有这个型号:
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
。