SelectedValue not changing when loading via JavaScript method

4 posts, 0 answers
  1. Billy Hasan
    Billy Hasan avatar
    18 posts
    Member since:
    May 2006

    Posted 16 Jul 2010 Link to this post

    Hello,

    I have a RadComboBox using EnableLoadOnDemand="true" and I do not want the user to be able to type custom text into this combo box. Looking around I came across this article. These changes work, however when the user clicks a button I need to retrieve the SelectedValue in the combo box. It appears that it does not know an item was selected as the SelectedValue property never changes. Is there a way to handle this?

    I could change this to allow the user to type custom text into the combo box, however according to this article the "In load-on-demand scenario the user will be able to type anything into the input area and if no item matches - the input area will be reset to blank." statement does not see to be true because whatever they type in is staying in the box and not being cleared out if the the item is not in the list.

    I can go either way, except neither seem to be fully working for me.

    Thanks!
  2. Simon
    Admin
    Simon avatar
    2281 posts

    Posted 21 Jul 2010 Link to this post

    Hi Billy Hasan,

    I just checked the first setup and it worked on my side withe the latest version of Telerik.Web.UI.

    Please compare my code (in the attached page) and let me know if I am missing something.

    All the best,
    Simon
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. Billy Hasan
    Billy Hasan avatar
    18 posts
    Member since:
    May 2006

    Posted 21 Jul 2010 Link to this post

    Your code worked, however I need to have a default item selected in the list. Once I added the code for that your code no longer works. Sorry I did not mention that before, I thought it wasn't working without the default selected item code but apparently your's seems to work without it.

    Here is my code:

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="NewInnovations.Demographics.Web.WebForm1" %>
     
    <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div>
            <telerik:RadComboBox ID="RadComboBox1" runat="server" OnClientDropDownOpening="onDropDownOpening"></telerik:RadComboBox>
        </div>
     
        <asp:Button ID="Button1" runat="server" Text="alabala" />
        <asp:Label ID="Label1" runat="server"></asp:Label>
        </form>
     
        <script type="text/javascript">
            function onDropDownOpening(sender) {
                var attributes = sender.get_attributes();
                if (attributes.getAttribute("DefaultItem") == "true") {
                    sender.requestItems("", false);
                    attributes.setAttribute("DefaultItem", "false");
                } else if (sender.get_items().get_count() == 0) {
                    sender.requestItems("", false);
                }
            }
        </script>
    </body>
    </html>
    Imports Telerik.Web.UI
     
    Public Class WebForm1
        Inherits System.Web.UI.Page
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Me.IsPostBack = False Then
                RadComboBox1.Attributes.Add("DefaultItem", "true")
                RadComboBox1.Items.Add(New RadComboBoxItem("item 3", "3"))
            End If
        End Sub
     
        Private Sub RadComboBox1_ItemsRequested(ByVal o As Object, ByVal e As Telerik.Web.UI.RadComboBoxItemsRequestedEventArgs) Handles RadComboBox1.ItemsRequested
            RadComboBox1.Items.Clear()
            '
            RadComboBox1.Items.Add(New RadComboBoxItem("item 1", "1"))
            RadComboBox1.Items.Add(New RadComboBoxItem("item 2", "2"))
            RadComboBox1.Items.Add(New RadComboBoxItem("item 3", "3"))
            RadComboBox1.Items.Add(New RadComboBoxItem("item 4", "4"))
        End Sub
     
        Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Label1.Text = RadComboBox1.SelectedValue
        End Sub
    End Class
  4. Simon
    Admin
    Simon avatar
    2281 posts

    Posted 23 Jul 2010 Link to this post

    Hi Billy Hasan,

    Thank you for clarifying this.

    This behavior is normal when you do not have Load On Demand enabled and the RadComboBox is read-only. After postback, the RCB has only one Item - the default one as it is loaded from ViewState (LOD Items are not persisted across postbacks), so its Text and Value are the actual ones, so the selection made on the client is lost.

    You can work around this if you disable the ViewState of the RCB, enable its AllowCustomText property and make the control read-only on the client:
    <telerik:RadComboBox ID="RadComboBox1" runat="server" OnClientDropDownOpening="onDropDownOpening"
        EnableViewState="false" AllowCustomText="true" OnClientLoad="onLoad">
    </telerik:RadComboBox>
    function onLoad(sender) {
        sender.get_inputDomElement().readOnly = "readonly";
        sender.get_inputDomElement().parentNode.parentNode.className = "rcbReadOnly";
    }

    Then you have to add the Default Item on each postback and pre-select it only on the first page load:
    Protected Sub Page_Load(sender As Object, e As EventArgs)
        RadComboBox1.Attributes.Add("DefaultItem", "true")
        RadComboBox1.Items.Add(New RadComboBoxItem("item 3", "3"))
     
        If Not Page.IsPostBack Then
            RadComboBox1.Items(0).Selected = True
        End If
    End Sub

    Please let me know if this setup is useful to you.

    Kind regards,
    Simon
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Back to Top