C# DropDownList用于回发时未正确绑定

C# DropDownList用于回发时未正确绑定,c#,asp.net-mvc,razor,html.dropdownlistfor,C#,Asp.net Mvc,Razor,Html.dropdownlistfor,我有一个无法正常工作的下拉列表。我可以从数据库中获取正确的项目,并在get上显示它们,但当我在提交上发回时,“listLanguages”为空。我不确定我的html DropDownList for属性是否正确 这是我的密码 在我的viewmodel中 public IEnumerable<SelectListItem> listLanguages { get; set; } 您应该使用另一个属性来保存视图模型中的选定项 public class YourViewModel {

我有一个无法正常工作的下拉列表。我可以从数据库中获取正确的项目,并在get上显示它们,但当我在提交上发回时,“listLanguages”为空。我不确定我的html DropDownList for属性是否正确

这是我的密码

在我的viewmodel中

public IEnumerable<SelectListItem> listLanguages { get; set; } 

您应该使用另一个属性来保存视图模型中的选定项

public class YourViewModel
{
  public string[] SelectedLanguages { set;get;}
  public IEnumerable<SelectListItem> listLanguages { get; set; } 
  //your other properties needed for the view.
}
现在,当您提交表单时,
SelectedLanguages
属性将包含所选项目

您将无法在HttpPost操作方法中获得
ProfileGeneralViewModel.listLanguages
的值。当表单被提交时,它发送表单中输入元素的值。
SelectedLanguage
下拉列表的值将是用户选择的选项,而不是用于构建下拉列表的集合


如果需要返回到同一视图,则需要在发送回使用该集合的视图之前重新加载该集合。

不能将
绑定到复杂对象的集合。也不能使用
DropDownList()
正确绑定到
-请参阅。您的模型需要一个单独的属性
IEnumerable SelectedLanguages
才能绑定到它必须是
ListBoxFor()
才能正确绑定到
它确实会在chrome中调出一个支持多选的SELECT元素,而edgeIt不能正确绑定!请参考我评论中的问题链接。用户何时提交数据(在httppost操作中)?是的。刚刚在MVC5应用程序中验证
SelectedLanguages
属性将使用所有选定的选项值填充。您现在还应该删除不必要的
new{@multiple=“multiple”}
:)
@Html.ListBoxFor(model => model.SelectedLanguages , 
       Model.ProfileGeneralViewModel.listLanguages, 
      new { @class = "multiple-languages form-control", @style = "width: 100%" })