我有一个无法正常工作的下拉列表。我可以从数据库中获取正确的项目并在get上显示它们,但是当我回复提交时,'listLanguages'为空。我不确定我的html DropDownListFor属性是否正确?
这是我的代码
在我的viewmodel中
public IEnumerable<SelectListItem> listLanguages { get; set; }
在我的视图中
@Html.DropDownListFor(model => model.ProfileGeneralViewModel.listLanguages, Model.ProfileGeneralViewModel.listLanguages, new { @class = "multiple-languages form-control", @style = "width: 100%", @multiple = "multiple" })
这是我的获得
var languages = Enum.GetNames(typeof(SpokenLanguages)).AsEnumerable();
var selectedLanguages = yogaProfile.Languages != null ? yogaProfile.Languages.Split(',').ToList() : new List<string>();
viewModel.ProfileGeneralViewModel.listLanguages = languages.Select(d => new SelectListItem
{
Text = d.ToString(),
Value = d.ToString(),
Selected = selectedLanguages.Contains(d.ToString())
});
答案 0 :(得分:1)
您应该使用其他属性来保存视图模型中的选定项目
public class YourViewModel
{
public string[] SelectedLanguages { set;get;}
public IEnumerable<SelectListItem> listLanguages { get; set; }
//your other properties needed for the view.
}
并在ListBoxFor
助手中将其用作第一个参数
@Html.ListBoxFor(model => model.SelectedLanguages ,
Model.ProfileGeneralViewModel.listLanguages,
new { @class = "multiple-languages form-control", @style = "width: 100%" })
现在,当您提交表单时,SelectedLanguages
属性将包含所选项目。
您的HttpPost操作方法中的ProfileGeneralViewModel.listLanguages
值不会。提交表单时,它会在其中发送输入元素的值。您的SelectedLanguage
下拉列表的值将是用户选择的选项,而不是用于构建下拉列表的集合。
如果您需要返回相同的视图,则需要重新加载该集合,然后再发送回使用它的视图。