-
Is there an existing issue for this?
Describe the bug在后台代码中 sSelectedValue = sSelectedItems.First();//不触发OnSelectedItemChanged 我看Select的代码判定是否触发OnSelectedItemChanged有个内部变量_lastSelectedValueString Expected BehaviorValue置为null时清空上次选择的记忆,或者给个选项能够清空。 Interactive render modeInteractive Server (Interactive server-side rendering (interactive SSR) using Blazor Server) Steps To Reproduce在后台代码中 (如果第一个选项的文本值,和置为null之前的不一样,会触发OnSelectedItemChanged) 我看Select的代码判定是否触发OnSelectedItemChanged有个内部变量_lastSelectedValueString Exceptions (if any)No response .NET VersionNET9.0 Anything else?No response |
Beta Was this translation helpful? Give feedback.
Replies: 16 comments 2 replies
-
|
@water1983 Thank you for filing this issue. In order for us to investigate this issue, please provide a minimalistic repro project that illustrates the problem. |
Beta Was this translation helpful? Give feedback.
-
|
@water1983 感谢提交代码,马上修复一下,代码尽量不要贴上来,上传示例工程(删除 bin obj),如果要贴也要格式化,不然没有办法看。谢谢啦 |
Beta Was this translation helpful? Give feedback.
-
|
@water1983 Issue 中的代码我已经帮你格式化了。这样别人来看也很容易阅读 |
Beta Was this translation helpful? Give feedback.
-
|
@water1983 这个问题我看了一下源码,不建议触发 |
Beta Was this translation helpful? Give feedback.
-
好的,感谢快速回复。 那看来只能在sSelectedValue = sSelectedItems.First();后代码里直接去调OnSelectedItemChanged了,不过会有时候调一遍有时候调两遍(如前文,sSelectedItems.First()中的内容与清空之前的选择项的内容不同时,sSelectedItems.First()本身会调一次),只能在变更Items的时候暂时解绑OnSelectedItemChanged事件了,手动调完再重新绑定。 |
Beta Was this translation helpful? Give feedback.
-
|
@water1983 一样的道理啊。微软的路子是走的 望再理解一下 但是如果有时候一次有时候二次,这感觉是有问题的。希望给出例子,我来排查一下问题点,可能有 bug |
Beta Was this translation helpful? Give feedback.
-
|
@ArgoZhang 大佬看下,不知道能否表达清楚 测试方法在Index页 |
Beta Was this translation helpful? Give feedback.
-
|
@water1983 我运行了代码,我没发现问题点,都符合预期啊 能否写一下 预期是什么,实际是什么 这种测试步骤与报告,我针对性测试一下 |
Beta Was this translation helpful? Give feedback.
-
|
@ArgoZhang 运行效果为,第一个按钮,点第一次的时候,OnSelectedItemChanged会触发,点第二次的时候,不触发。 预期是每次点第一个按钮,都触发OnSelectedItemChanged 原理是,第一个按钮里,每次都先将Value改为null,将Items清空,并重新添加Items,并自动选择第一项,同时要触发第一项里的OnSelectedItemChanged(每次重新添加并选择第一项后都要触发)。 我看到Select源码中,判断是否触发OnSelectedItemChanged有一个内部字段_lastSelectedValueString,但是在赋值Value为null或者清空Items的时候,这个字段的内容并没有改变,依然维持上一次的Value。所以导致Value设置为null和清空Items后再添加Items,如果Items.First().Value与_lastSelectedValueString相同,就不会触发OnSelectedItemChanged了。 |
Beta Was this translation helpful? Give feedback.
-
|
第一个问题为什么两次都要触发 你的逻辑是 Value1 => Null => Value1 但是你中间没有更新 UI,对组件而言始终是 你的需求正确的逻辑应该是这样 选中 Value1 选项后,不是赋值 null 而是赋值一个 注意点你候选项中要有 还有一个点,你日常开发,自己代码主动更改了下拉框数据源以及选项,就走内部逻辑啊,为什么要依赖 UI 的变换再去改变另外一个数据逻辑?我理解你的做法,但是这样做你想想是不是效率非常低,你改变第一个下拉框的东西,要让 UI 去触发,然后又去走后台逻辑改变第二个下拉框的 UI 然后再去变更 UI,为什么不是一次到位,后台改变一次数据, UI 更新一次呢?逻辑清晰,效率还高,后台数据改变一次,UI更新一次(多个下拉框一次刷新) |
Beta Was this translation helpful? Give feedback.
-
|
@ArgoZhang |
Beta Was this translation helpful? Give feedback.
-
|
但是这个对于组件来说,他就是相同的,如果这里改了,那么你下拉选项里重新选择相同的内容,它也会触发OnSelectedItemChanged事件,这个明显是不合理的 |
Beta Was this translation helpful? Give feedback.
-
|
@water1983 Select 组件目前就是根据 |
Beta Was this translation helpful? Give feedback.
-
我说的是将value改为null后,再改相同值时,触发。这个行为和重复选择相同内容不一样(重复选择并没有改null),并不会导致重复选择相同内容重复触发。 |
Beta Was this translation helpful? Give feedback.
-
好的,谢谢。我试下这个。 |
Beta Was this translation helpful? Give feedback.
-
|
找到了个属性IsUseDefaultItemWhenValueIsNull 每次都会触发OnSelectedItemChanged 此问题终结,感谢 @ArgoZhang 大佬。 |
Beta Was this translation helpful? Give feedback.
@water1983 Select 组件目前就是根据
Value值判断的。而且这个值是 值类型,所以无法满足你的需求,你可以试试看SelectGeneric组件,这个组件 Value 是Class这样就可以做到两次Class.Id一样也可以触发,因为 Class 不是同一个实例了