DropDownListFor在回发时没有正确绑定

时间:2017-09-04 23:18:13

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

我有一个无法正常工作的下拉列表。我可以从数据库中获取正确的项目并在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())
      });

1 个答案:

答案 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下拉列表的值将是用户选择的选项,而不是用于构建下拉列表的集合。

如果您需要返回相同的视图,则需要重新加载该集合,然后再发送回使用它的视图。