gpt4 book ai didi

asp.net-mvc - ASP.NET MVC MultiSelectList 的选定值未正确选择

转载 作者:行者123 更新时间:2023-12-03 10:18:35 25 4
gpt4 key购买 nike

我知道其他人已经问过这个问题,但我对此完全感到困惑:

这将显示未选择任何值的下拉列表:

<%= Html.DropDownList("items", new MultiSelectList(Model.AvailableItems,
"id", "name", Model.items), new { multiple = "multiple" })%>

这将显示下拉列表,其中包含我传入的值 (Model.items) 正确选择,就像我期望的那样:
<%= Html.DropDownList("somethingelse", new MultiSelectList(Model.AvailableItems,
"id", "name", Model.items), new { multiple = "multiple" })%>

但问题是,当我 POST 时,这个项目现在被命名为“somethingelse”。我知道我可以解决这个问题,但这是怎么回事?

最佳答案

您遇到的问题是使用 Model.Items 作为参数。编码

<%= Html.DropDownList("items", new MultiSelectList(Model.AvailableItems,
"id", "name", Model.items), new { multiple = "multiple" })%>

实际上并没有像您期望的那样工作。它正在工作,因为下拉列表的名称是“项目”。那是因为有一个名为“items”的表单参数回发到您的操作中。该参数存储在操作的 ViewState 中(不要与 ViewData 混淆)。
Html.DropdownList() 看到有一个 ViewState 参数与您命名下拉列表的名称相同,并使用该 ViewState 参数计算出所选值。 它完全忽略您传入的 Model.items。

如果有人可以解释无法覆盖默认行为的逻辑,那么我很乐意听到。

所以,这是你的第一个问题。要解决这个问题,您所要做的就是将下拉列表重命名为其他名称 - 就像您在第二个示例中所做的那样。现在你的第二个问题开始发挥作用:所选项目的列表必须是一个简单对象的集合(我认为它实际上需要是一个 IEnumerable 但我不是 100% 确定)。

DropDownList() 方法将尝试将这些选定的值与您的 AvailableItems 中的值进行匹配。收藏。如果它不能这样做,它将尝试与文本匹配。

所以,试试这个,看看它是否有效
<%= Html.DropDownList("somethingelse", new MultiSelectList(Model.AvailableItems,
"id", "name", Model.items.Select(c=> c.name)), new { multiple = "multiple" })%>

祝你好运

关于asp.net-mvc - ASP.NET MVC MultiSelectList 的选定值未正确选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com