0

我一直有这个问题,一直无法找到解决我的问题的方法......

我有一个选择列表,我希望允许用户选择多个,并且我正在使用 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-控制/

我还尝试制作字典的克隆,但是当我选择的对象在一个数组中(并且再次在一个列表中)时,只使用我想要的项目并传入一个值数组(而不是键)。

4

1 回答 1

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"))

我在这里简化了模型,你明白了。

于 2013-05-20T23:23:45.123 回答