FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 2856|回复: 3

DropDownList多选的时候清空有问题

[复制链接]
发表于 2020-6-24 19:06:03 | 显示全部楼层 |阅读模式
多选的状态下GetClearSelectionReference这个没有清空f_state里的SelectedValueArray
导致回发的时候又带上了选中的那项
发表于 2020-6-26 23:00:02 | 显示全部楼层
已测试,这个地方没问题。

首先 ClearSelection 是注册一段JS脚本,JS脚本是不会改变 f_state 的任何内容,因为这个是服务器用的变量,只能在服务器端改变。但是 ClearSelection 的确会在客户端清空选中项,并在回发时影响到服务器端的SelectedItemArray属性。

测试案例:1. 打开:https://pro.fineui.com/dropdownlist/multiselect.aspx
2. 任意选中两项
3. 在浏览器端执行脚本:F.ui.SimpleForm1_DropDownList1.clearSelection()
4. 点击【获取此下拉列表的选中项】,此时服务器返回【无选中项
5. Done!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2020-7-9 12:01:44 | 显示全部楼层
sanshi 发表于 2020-6-26 23:00
已测试,这个地方没问题。

首先 ClearSelection 是注册一段JS脚本,JS脚本是不会改变 f_state 的任何内容 ...

看下这个,流程说明放在包里了

https://wwa.lanzous.com/idgojeg3hdi
密码:2x89


发表于 2020-7-10 09:53:17 | 显示全部楼层
竹席 发表于 2020-7-9 12:01
看下这个,流程说明放在包里了

https://wwa.lanzous.com/idgojeg3hdi

我测试了你的示例,顺便把代码放出来:
  1. <f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server"></f:PageManager>
  2.         <f:Panel runat="server" ID="Panel1" IsFluid="true" IsViewPort="true" AutoScroll="true" ShowBorder="false" ShowHeader="false" >
  3.             <Items>
  4.                 <f:DropDownList runat="server" ID="ddl_Test" Label="测试" LabelAlign="Left" LabelWidth="70" AutoPostBack="true" AutoSelectFirstItem="false" EmptyText="请选择" EnableMultiSelect="true">
  5.                     <f:ListItem Text="1" Value="1" />
  6.                     <f:ListItem Text="2" Value="2" />
  7.                     <f:ListItem Text="3" Value="3" />
  8.                 </f:DropDownList>
  9.                 <f:Button runat="server" ID="btnClear" Text="清除" Width="140" Height="32"></f:Button>
  10.                 <f:Button runat="server" ID="btnSub" Text="获取" Width="140" Height="32"></f:Button>
  11.                 <f:TextBox runat="server" ID="tb_1"></f:TextBox>
  12.             </Items>
  13.         </f:Panel>
复制代码


后台:
  1. protected void Page_Init(object sender, EventArgs e)
  2.         {
  3.             ddl_Test.SelectedIndexChanged += Ddl_Test_SelectedIndexChanged;
  4.             btnClear.Click += BtnClear_Click;
  5.             btnSub.Click += BtnSub_Click;
  6.         }

  7.         private void BtnClear_Click(object sender, EventArgs e)
  8.         {
  9.             ddl_Test.ClearSelection();
  10.         }

  11.         private void Ddl_Test_SelectedIndexChanged(object sender, EventArgs e)
  12.         {

  13.         }

  14.         private void BtnSub_Click(object sender, EventArgs e)
  15.         {
  16.             tb_1.Text = string.Join(",", ddl_Test.SelectedValueArray);
  17.         }

  18.         
复制代码



然后你的流程说明:
流程是这样的
先全部选中,点一次获取,在点一次清除(这里是在后台清除的选中)
执行下F(Panel1_ddl_Test).f_state,SelectedValueArray不应该清除吗?为什么还是在




==我是分割线===============================================
其实,我前面回答的已经很清楚了,你可以仔细品一品我这句话:
首先 ClearSelection 是注册一段JS脚本,JS脚本是不会改变 f_state 的任何内容,因为这个是服务器用的变量,只能在服务器端改变。但是 ClearSelection 的确会在客户端清空选中项,并在回发时影响到服务器端的SelectedItemArray属性。


关键点看红色标识:

首先 ClearSelection 是注册一段JS脚本,JS脚本是不会改变 f_state 的任何内容,因为这个是服务器用的变量,只能在服务器端改变。但是 ClearSelection 的确会在客户端清空选中项,并在回发时影响到服务器端的SelectedItemArray属性。

=========
你要理解一点,f_state是用来维护前后台数据的,所以不要在客户端视图使用f_state里面的任何变量。


你上面说的逻辑是不对的:
先全部选中,点一次获取,在点一次清除(这里是在后台清除的选中)
执行下F(Panel1_ddl_Test).f_state,SelectedValueArray不应该清除吗?
此时执行:F(Panel1_ddl_Test).f_state 里面的内容不会有任何变化,也就是SelectedValueArray肯定还在!

只有在下次回发时,才会更新服务器端变量:SelectedValueArray

整个流程没有问题。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-3-29 05:38 , Processed in 0.048082 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表