|
我测试了你的示例,顺便把代码放出来:
- <f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server"></f:PageManager>
- <f:Panel runat="server" ID="Panel1" IsFluid="true" IsViewPort="true" AutoScroll="true" ShowBorder="false" ShowHeader="false" >
- <Items>
- <f:DropDownList runat="server" ID="ddl_Test" Label="测试" LabelAlign="Left" LabelWidth="70" AutoPostBack="true" AutoSelectFirstItem="false" EmptyText="请选择" EnableMultiSelect="true">
- <f:ListItem Text="1" Value="1" />
- <f:ListItem Text="2" Value="2" />
- <f:ListItem Text="3" Value="3" />
- </f:DropDownList>
- <f:Button runat="server" ID="btnClear" Text="清除" Width="140" Height="32"></f:Button>
- <f:Button runat="server" ID="btnSub" Text="获取" Width="140" Height="32"></f:Button>
- <f:TextBox runat="server" ID="tb_1"></f:TextBox>
- </Items>
- </f:Panel>
复制代码
后台:
- protected void Page_Init(object sender, EventArgs e)
- {
- ddl_Test.SelectedIndexChanged += Ddl_Test_SelectedIndexChanged;
- btnClear.Click += BtnClear_Click;
- btnSub.Click += BtnSub_Click;
- }
- private void BtnClear_Click(object sender, EventArgs e)
- {
- ddl_Test.ClearSelection();
- }
- private void Ddl_Test_SelectedIndexChanged(object sender, EventArgs e)
- {
- }
- private void BtnSub_Click(object sender, EventArgs e)
- {
- tb_1.Text = string.Join(",", ddl_Test.SelectedValueArray);
- }
-
复制代码
然后你的流程说明:
流程是这样的
先全部选中,点一次获取,在点一次清除(这里是在后台清除的选中)
执行下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
整个流程没有问题。
|
|