![]() |
1
21
您遇到的问题是使用model.items作为参数。代码
并不像你想象的那样工作。它起作用,因为下拉列表的名称是“items”。这是因为有一个名为“items”的表单参数发布回了您的操作。该参数存储在操作的视图状态中(不要与视图数据混淆)。 在html.dropdownlist()中,有一个viewstate参数的名称与您命名下拉列表的名称相同,并使用该viewstate参数计算出选定的值。 它完全忽略您传入的model.items。 如果有人能解释不能覆盖默认行为的逻辑,那么我想听听。 所以,这是你的第一个问题。要绕过这个问题,您所要做的就是将下拉列表重命名为其他内容——就像在第二个示例中所做的那样。现在,您的第二个问题开始发挥作用:所选项目的列表必须是简单对象的集合(我认为它实际上需要是IEnumerable,但我不是100%确定)。
DropDownList()方法将尝试将这些选定的值与
所以,试试这个看看它是否有效
祝你好运 |
![]() |
2
51
您的问题中提供的上下文太少,但我将尝试展示一个完整的工作示例: 模型:
控制器:
观点:
注意到
|
![]() |
3
5
我也有同样的问题,我使用自己的扩展方法生成HTML并解决了问题。
|
![]() |
4
3
实际上,如果您查看MVC源代码,默认情况下,此行为将被烘焙到DropDownListfor中(搜索allowMultiple:false)。解决方案是使用listbox for(在MVC源代码allowmultiple:true中也会看到这一点),这在HTML方面很有意义,两者都呈现为
您不必像上面的答案中所建议的那样在模型上使用不同的属性,我只需切换到ListBoxfor(CSS从中获取它)即可实现这一点:
工作起来就像一个魅力,即使是在出错的情况下发布和重新显示视图。 |
![]() |
5
1
我在使用时也遇到了类似的问题
如果我执行以下操作,则项目不会显示为选中。
如果我把它改成下面的,那就好了。
|
|
6
0
您可以使用此转到“items”的值
这将使您以字符串形式获得所选项目,并用逗号(,)分隔。 |