7

我正在尝试为 MultiSelectList 设置选定的值,但页面未显示任何选定的值。我已经尝试了所有可行的方法来做到这一点,但仍然得到相同的结果。我目前正在尝试通过构造函数传递选定对象的列表。让我明白的是,当我检查 MultiSelectList 对象时, selectedvalues 属性包含我使用构造函数传递给它的项目,但它仍然不显示。

我注意到很多人都有同样的问题,但我还没有看到对我有用的答案。我尝试遍历列表并将 selected 属性设置为 true,我尝试从头开始创建多选列表并设置每个单独的项目 selected 属性,并且我尝试使用构造函数。这些都没有奏效。我还发现了一个建议,即 MultiSelectList 属性不能与控件(我尝试过)命名相同并且不起作用。为什么使用此框架创建具有选定值的下拉列表如此困难?我错过了什么吗?

<label for="StatesOfPractice">States of Practice:</label>
                    <br />
                    <%= Html.ListBox("StatesOfPractice", Model.StatesOfPracticeList)%>
                    <br />
                    <%= Html.ValidationMessage("StatesOfPractice")%>

编辑 1

当我实例化 MultiSelectList 时,它似乎正在发生。如果我检查视图中的对象并打开结果视图,我可以看到当我知道应该选择“阿拉斯加”时,它没有被选中。

http://imgur.com/eTIdH.jpg

我正在像这样实例化。

new MultiSelectList(List<GenericDataContract>, "Code", "Description", List<GenericDataContract>);

GenericDataContract 只是一个具有两个属性的类,代码和描述。第一个列表是所有状态,第二个列表是我选择的状态。

4

3 回答 3

9

Grrrrrr,我找到了。显然,所选项目只能是字符串列表。一旦我修改了我的代码以传递它,它就会选择这些值。

于 2010-03-03T21:22:05.730 回答
4

好的,这个真的让我很困惑,但我想我已经弄清楚了。

我在选择默认值的情况下显示的问题是用来显示多选列表而不是. 令人困惑的是,如果您指定 HTML 属性强制它这样做,将显示一个多选列表,但默认值不起作用,因为它只打算有一个默认值 - 因此以下不会选择任何默认值:MultiSelectList@Html.DropDownListFor(...)@Html.ListBoxFor(...)DropDownListFor

List<string> myStrings;
myStrings = new List<string>();
myStrings.Add("aaa");
myStrings.Add("bbb");
myStrings.Add("ccc");

ViewData["MyStringsDropdown"] = new MultiSelectList(
    myStrings.Select(abc => new { StringId = abc, Title = abc + "Title" }),
    "StringId",
    "Title",
    myStrings.Where(str => str == "aaa" || str == "ccc").ToList()
);

...

@Html.DropDownListFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" })

但是,以下显示选择的“aaa”和“ccc”的默认值:

@Html.ListBoxFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" })

但这是真正的踢球者;ASP.NET 有时似乎缓存了控件的类型,因此您可以将 替换为DropDownListFor,并且在您重新启动 IIS 工作进程之前ListBoxFor,它仍然不会预先选择任何默认值。我觉得这真的很奇怪,它让我有一段时间。

于 2012-12-19T11:25:41.690 回答
1

我相信它从模型中提取选定的项目,而不是从项目列表中。确保您的StatesOfPractice模型属性填充了您要选择的项目。也就是说,StatesOfPracticeList模型属性提供了用于填充列表的项目集。当表单发布时,模型属性StatesOfPractice将是一组选定的属性值,也应该包含呈现视图时的默认选定值。在后台,它使用 HtmlHelperGetModelStateValue方法来查找任何选择列表的选定值。我认为这样做是为了在出现验证错误并且使用模型状态错误重新呈现表单时更容易维护所选值。

于 2010-03-03T19:54:47.827 回答