我一直遇到这个问题而无法找到解决问题的方法......
我有一个选择列表,我想让用户选择多个,我正在使用ASP.NET。在最初选择它们之后,我希望它们能够在以后编辑它们的选择。我在使用ListBoxFor时填写选定的值时遇到问题。我猜测问题在于MultiSelectList。
我尝试使用数组,列表和词典来包含所选的值,但是在它生成的页面上没有选择任何值。通过使用断点并拆分代码以便我可以看到MultiSelectList,似乎SelectedValues属性始终与传递给构造函数的属性相同。
型号:
public class UniversityStrategicGoalsModel
{
public Dictionary<string, string> goals { get; set; }
public UniversityStrategicGoalsModel()
{
goals = new Dictionary<string, string>()
{
{"NA", "Not Applicable"},
{"1.1","1.1 blah blah blah"},
{"1.2","1.2 and many more strategic goals"}
};
}
}
控制器:
ProjectViewModel viewModel = new ProjectViewModel();
viewModel.Project = db.Projects.Find(id); // Gets unique project
viewModel.allGoals = new UniversityStrategicGoalsModel();
return View(viewModel);
查看:
@Html.ListBoxFor(model => model.Project.UniversityGoals, new MultiSelectList(Model.allGoals.goals, "Key", "Value", Model.Project.UniversityGoals.Split(','))
// An example of model.Project.UniversityGoals could be "1.1,1.2"
在此之后(使用对象列表而不是字典)没有帮助:http://ittecture.wordpress.com/2009/04/30/tip-of-the-day-198-asp-net-mvc-listbox-controls/
我也试过复制Dictionary,但只有我想要的项目,并且当我选择的对象在Array中时(并再次在List中)传入一个值数组(而不是键)。
答案 0 :(得分:2)
基本模型绑定需要两个属性。一个用于填充列表框,另一个用于保留选定列表框。
public class UniversityStrategicGoalsModel
{
public Dictionary<string, string> Goals { get; set; }
public IEnumerable<string> SelectedGoals { get; set; }
public UniversityStrategicGoalsModel()
{
Goals = new Dictionary<string, string>()
{
{"NA", "Not Applicable"},
{"1.1","1.1 blah blah blah"},
{"1.2","1.2 and many more strategic goals"}
};
}
}
然后创建列表框:
Html.ListBoxFor(model => model.SelectedGoals ,
new MultiSelectList(Model.Goals, "Key", "Value"))
我在这里简化了模型,你明白了。