在Html.ListBox创建中选择值

时间:2013-05-20 23:13:35

标签: c# asp.net asp.net-mvc forms

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

我有一个选择列表,我想让用户选择多个,我正在使用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中)传入一个值数组(而不是键)。

1 个答案:

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

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