Nov 29, 2011, 2:08 PM
[CLOSED] MultiCombo Change Event Not Saving ViewState
In the first example below, I have a simple MultiCombo control that triggers a Change OnEvent. This event attempts to store the value of the selected items in viewstate. However, when I try to retrieve them, they're not there.
In the second example, I've merely added another control to the page (ComboBox) with its own directevent. When this other control resides on the page, the value from the MultiCombo IS being successfully stored in viewstate and can be retrieved.
I believe there is an issue with the MultiCombo's Change OnEvent. What do you think and what workaround do you advise?
Example 1 (MultiCombo Not Storing ViewState)
In the second example, I've merely added another control to the page (ComboBox) with its own directevent. When this other control resides on the page, the value from the MultiCombo IS being successfully stored in viewstate and can be retrieved.
I believe there is an issue with the MultiCombo's Change OnEvent. What do you think and what workaround do you advise?
Example 1 (MultiCombo Not Storing ViewState)
<%@ Page Language="vb" AutoEventWireup="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Private Property MultiComboValues() As String
Get
Return ViewState("MultiComboValues")
End Get
Set(ByVal value As String)
ViewState("MultiComboValues") = value
End Set
End Property
Protected Sub Next_Click(sender As Object, e As DirectEventArgs)
Dim index As Integer = Integer.Parse(e.ExtraParams("index"))
If (index + 1) < Me.WizardPanel.Items.Count Then
Me.WizardPanel.ActiveIndex = index + 1
If Me.WizardPanel.ActiveIndex = 1 Then
TextField1.Text = MultiComboValues
End If
End If
Me.CheckButtons()
End Sub
Protected Sub Prev_Click(sender As Object, e As DirectEventArgs)
Dim index As Integer = Integer.Parse(e.ExtraParams("index"))
If (index - 1) >= 0 Then
WizardPanel.ActiveIndex = index - 1
End If
Me.CheckButtons()
End Sub
Private Sub CheckButtons()
Dim index As Integer = Me.WizardPanel.ActiveIndex
Me.btnNext.Disabled = If(index = Me.WizardPanel.Items.Count - 1, True, False)
Me.btnPrev.Disabled = If(index = 0, True, False)
End Sub
Protected Sub MultiCombo_Change(ByVal sender As Object, ByVal e As DirectEventArgs)
Dim values = String.Join(",", (From li In MultiCombo1.SelectedItems Select li.Value).ToArray)
ViewState("MultiComboValues") = values
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<ext:ResourceManager ID="ResourceManager1" runat="server" />
<ext:Panel ID="WizardPanel" runat="server" Title="Example Wizard" Padding="15" Height="300"
Layout="card" ActiveIndex="0">
<Items>
<ext:Panel ID="Panel1" runat="server" Border="false" Header="false">
<Items>
<ext:MultiCombo ID="MultiCombo1" runat="server">
<Items>
<ext:ListItem Text="Alpha" Value="1" />
<ext:ListItem Text="Bravo" Value="2" />
<ext:ListItem Text="Charlie" Value="3" />
</Items>
<DirectEvents>
<Change OnEvent="MultiCombo_Change" />
</DirectEvents>
</ext:MultiCombo>
</Items>
</ext:Panel>
<ext:Panel ID="Panel2" runat="server" Border="false" Header="false">
<Items>
<ext:TextField ID="TextField1" runat="server" />
</Items>
</ext:Panel>
</Items>
<Buttons>
<ext:Button ID="btnPrev" runat="server" Text="Prev" Disabled="true" Icon="PreviousGreen">
<DirectEvents>
<Click OnEvent="Prev_Click">
<ExtraParams>
<ext:Parameter Name="index" Value="#{WizardPanel}.items.indexOf(#{WizardPanel}.layout.activeItem)"
Mode="Raw" />
</ExtraParams>
</Click>
</DirectEvents>
</ext:Button>
<ext:Button ID="btnNext" runat="server" Text="Next" Icon="NextGreen">
<DirectEvents>
<Click OnEvent="Next_Click">
<ExtraParams>
<ext:Parameter Name="index" Value="#{WizardPanel}.items.indexOf(#{WizardPanel}.layout.activeItem)"
Mode="Raw" />
</ExtraParams>
</Click>
</DirectEvents>
</ext:Button>
</Buttons>
</ext:Panel>
</form>
</body>
</html>
Example 2 (MultiCombo is storing viewstate)<%@ Page Language="vb" AutoEventWireup="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Private Property MultiComboValues() As String
Get
Return ViewState("MultiComboValues")
End Get
Set(ByVal value As String)
ViewState("MultiComboValues") = value
End Set
End Property
Private Property ComboBoxValue() As String
Get
Return ViewState("ComboBoxValue")
End Get
Set(ByVal value As String)
ViewState("ComboBoxValue") = value
End Set
End Property
Protected Sub Next_Click(sender As Object, e As DirectEventArgs)
Dim index As Integer = Integer.Parse(e.ExtraParams("index"))
If (index + 1) < Me.WizardPanel.Items.Count Then
Me.WizardPanel.ActiveIndex = index + 1
If Me.WizardPanel.ActiveIndex = 1 Then
TextField1.Text = MultiComboValues
TextField2.Text = ComboBoxValue
End If
End If
Me.CheckButtons()
End Sub
Protected Sub Prev_Click(sender As Object, e As DirectEventArgs)
Dim index As Integer = Integer.Parse(e.ExtraParams("index"))
If (index - 1) >= 0 Then
WizardPanel.ActiveIndex = index - 1
End If
Me.CheckButtons()
End Sub
Private Sub CheckButtons()
Dim index As Integer = Me.WizardPanel.ActiveIndex
Me.btnNext.Disabled = If(index = Me.WizardPanel.Items.Count - 1, True, False)
Me.btnPrev.Disabled = If(index = 0, True, False)
End Sub
Protected Sub MultiCombo_Change(ByVal sender As Object, ByVal e As DirectEventArgs)
Dim values = String.Join(",", (From li In MultiCombo1.SelectedItems Select li.Value).ToArray)
ViewState("MultiComboValues") = values
End Sub
Protected Sub ComboBox_Select(ByVal sender As Object, ByVal e As DirectEventArgs)
Dim value = ComboBox1.SelectedItem.Value
ViewState("ComboBoxValue") = value
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<ext:ResourceManager ID="ResourceManager1" runat="server" />
<ext:Panel ID="WizardPanel" runat="server" Title="Example Wizard" Padding="15" Height="300"
Layout="card" ActiveIndex="0">
<Items>
<ext:Panel ID="Panel1" runat="server" Border="false" Header="false">
<Items>
<ext:MultiCombo ID="MultiCombo1" runat="server">
<Items>
<ext:ListItem Text="Alpha" Value="1" />
<ext:ListItem Text="Bravo" Value="2" />
<ext:ListItem Text="Charlie" Value="3" />
</Items>
<DirectEvents>
<Change OnEvent="MultiCombo_Change" />
</DirectEvents>
</ext:MultiCombo>
<ext:ComboBox ID="ComboBox1" runat="server">
<Items>
<ext:ListItem Text="Alpha" Value="1" />
<ext:ListItem Text="Bravo" Value="2" />
<ext:ListItem Text="Charlie" Value="3" />
</Items>
<DirectEvents>
<Select OnEvent="ComboBox_Select" />
</DirectEvents>
</ext:ComboBox>
</Items>
</ext:Panel>
<ext:Panel ID="Panel2" runat="server" Border="false" Header="false">
<Items>
<ext:TextField ID="TextField1" runat="server" />
<ext:TextField ID="TextField2" runat="server" />
</Items>
</ext:Panel>
</Items>
<Buttons>
<ext:Button ID="btnPrev" runat="server" Text="Prev" Disabled="true" Icon="PreviousGreen">
<DirectEvents>
<Click OnEvent="Prev_Click">
<ExtraParams>
<ext:Parameter Name="index" Value="#{WizardPanel}.items.indexOf(#{WizardPanel}.layout.activeItem)"
Mode="Raw" />
</ExtraParams>
</Click>
</DirectEvents>
</ext:Button>
<ext:Button ID="btnNext" runat="server" Text="Next" Icon="NextGreen">
<DirectEvents>
<Click OnEvent="Next_Click">
<ExtraParams>
<ext:Parameter Name="index" Value="#{WizardPanel}.items.indexOf(#{WizardPanel}.layout.activeItem)"
Mode="Raw" />
</ExtraParams>
</Click>
</DirectEvents>
</ext:Button>
</Buttons>
</ext:Panel>
</form>
</body>
</html>
Last edited by Daniil; Dec 01, 2011 at 7:34 PM.
Reason: [CLOSED]