我有这个型号:
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属性分配了必须在视图中选择的元素。
Controller还调用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。
我怎样才能做到这一点?
谢谢Jaime
为了将<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属性包含整数值,您可以根据数据库中的实际ID数据类型尝试List<int> CamposId
。