This is a migrated thread and some comments may be shown as answers.

[Solved] requestItems not calling WebService

1 Answer 159 Views
ComboBox
This is a migrated thread and some comments may be shown as answers.
Paweł Aszklar
Top achievements
Rank 1
Paweł Aszklar asked on 07 Sep 2009, 11:04 AM

Hi,

I have encountered an issue after downloading internal build of ASP.NET AJAX UI Controls version 2009.2.824, and it still exists in release version 2009.2.826.35. I have a control with two related comboBoxes both of which use webservices to get items. When the page is loaded both comboBoxes get populated as expected, but when I change selected item in the first one OnClientSelectedIndexChange gets called where I call requestItems on the other comboBox, but WebService method does not execute.


here is my markup:

<div class="border"></div>  
<div style="clear:both; overflow:hidden; margin:2px">  
    <div style="float:left; width:170px">Wybierz przedstawiciela:</div>  
    <div style="float:left; width:400px">  
        <telerik:RadComboBox ID="_rcbBokers" runat="server" OnClientLoad="OnBrokersLoad"  
            LoadingMessage="WczytujÄ™..." NoWrap="true" Skin="Default" AllowCustomText="false"  
            OnClientSelectedIndexChanged="OnBrokerChanged" OnClientItemsRequesting="OnBrokersRequesting"  
            OnClientItemsRequested="OnBrokersRequested">  
            <WebServiceSettings Method="GetBrokers" Path="WebServices/WarehousesService.asmx" />  
        </telerik:RadComboBox>  
    </div>  
</div>  
<div class="border"></div>  
<div style="clear:both; overflow:hidden; margin:2px">  
    <div style="float:left; width:170px">Wybierz magazyn:</div>  
    <div style="float:left; width:400px">  
        <telerik:RadComboBox ID="_rcbWarehouses" runat="server" OnClientItemsRequesting="OnWarehousesRequesting"  
            LoadingMessage="WczytujÄ™..." NoWrap="true" Skin="Default" AllowCustomText="false" OnClientItemsRequested="OnWarehousesRequested">  
            <WebServiceSettings Method="GetWarehouses" Path="~/WebServices/WarehousesService.asmx" />  
        </telerik:RadComboBox>  
    </div>  
</div> 

here is my code behind:

public partial class WarehousePicker : UserControl  
    {  
        protected void Page_Load(object sender, EventArgs e)  
        {  
            if (IsPostBack) return;  
            if (Session["warehouseId"] != null)  
            {  
                ViewState["warehouseId"] = Session["warehouseId"];  
                ViewState["brokerId"] = Session["brokerId"];  
            }  
            else  
            {  
                ViewState["warehouseId"] = -1;  
                ViewState["brokerId"] = -1;  
            }  
            if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(WarehousePicker), "warehousPickerScript"))  
                Page.ClientScript.RegisterClientScriptBlock(typeof(WarehousePicker), "warehousePickerScript",  
                                                            string.Format(  
                                                                Properties.Settings.Default.WarehousePickerScript,  
                                                                ViewState["brokerId"], _rcbWarehouses.ClientID,   
                                                                _rcbBokers.ClientID, ViewState["warehouseId"]));  
            Session["warehouseId"] = null;  
            Session["brokerId"] = null;  
        }  

here is javascript I have in Settings.Default.WarehousePickerScript

<script type="text/javascript">  
//<![CDATA[  
function OnBrokersLoad(combo, eventArgs) {{  
    combo.requestItems(""false);  
}}  
function OnBrokersRequesting(combo, eventArgs) {{  
    var brokerId = '{0}';  
    var context = eventArgs.get_context();  
    context["BrokerID"] = brokerId;  
}}  
function OnBrokersRequested(combo, eventArgs) {{  
    var item = combo.findItemByValue('{0}');  
    if (!item && combo.get_items().get_count() > 0) {{  
        item = combo.get_items().getItem(0);  
    }}  
    if (item) {{  
        combo.set_text(item.get_text());  
        item.select();  
    }}  
    var warehouseCombo = $find('{1}');  
    warehouseCombo.requestItems(combo.get_value(), false);  
}}  
function OnBrokerChanged(combo, eventArgs) {{  
    var warehousesCombo = $find('{1}');  
    var item = eventArgs.get_item();  
    warehousesCombo.requestItems(item.get_value(), false);  
}}  
function OnWarehousesRequesting(combo, eventArgs) {{  
    var brokersCombo = $find('{2}');  
    var warehouseId = '{3}';  
    var context = eventArgs.get_context();  
    context["BrokerID"] = brokersCombo.get_value();  
}}  
function OnWarehousesRequested(combo, eventArgs) {{  
    var item = combo.findItemByValue('{3}');  
    if (!item && combo.get_items().get_count() > 0) {{  
        item = combo.get_items().getItem(0);  
    }}  
    if (item) {{  
        combo.set_text(item.get_text());  
        item.select();  
    }}  
}}  
//]]>  
</script> 

and here is my WebService code:

[WebService(Namespace = "http://tempuri.org/")]  
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
    [GenerateScriptType(typeof(BrokerItem))]  
    [GenerateScriptType(typeof(WarehouseItem))]  
    [GenerateScriptType(typeof(SelectionMode))]  
    [ToolboxItem(false)]  
    [ScriptService]  
    public class WarehousesService : WebService  
    {  
        [WebMethod(EnableSession = true)]  
        public RadComboBoxData GetBrokers(RadComboBoxContext context)  
        {  
            var userId = ((User)HttpContext.Current.Session["user"]).ID;  
            var brokerText = context["BrokerID"].ToString();  
            int brokerId;  
            var data = new RadComboBoxData();  
            int.TryParse(brokerText, out brokerId);  
            data.Items = (from broker in Entities.Instance.GetBrokers(userId, ActiveType.Active, ActiveType.Active, Premission.Preview | Premission.Central)  
                          select new RadComboBoxItemData { Text = broker.Name, Value = broker.ID.ToString() }).ToArray();  
            data.EndOfItems = true;  
            data.NumberOfItems = data.Items.Length;  
            var item = (from itemData in data.Items where itemData.Value == brokerText select itemData).FirstOrDefault();  
            if (item != null)  
            {  
                data.Text = item.Text;  
                data.Value = item.Value;  
            }  
            else if (string.IsNullOrEmpty(context.Text) && data.Items.Length > 0)  
            {  
                data.Text = data.Items[0].Text;  
                data.Value = data.Items[0].Value;  
            }  
            return data;  
        }  
 
        [WebMethod(EnableSession = true)]  
        public RadComboBoxData GetWarehouses(RadComboBoxContext context)  
        {  
            var brokerText = context["BrokerID"].ToString();  
            var userId = ((User)HttpContext.Current.Session["user"]).ID;  
            int brokerId;  
            int.TryParse(brokerText, out brokerId);  
            var data = new RadComboBoxData  
            {  
                EndOfItems = true,  
                Items = (from warehouse in Entities.Instance.GetUserWarehouses(brokerId, userId, ActiveType.Active, Premission.Edit)  
                         where warehouse.ID != 1  
                         select  
                             new RadComboBoxItemData { Text = warehouse.Name, Value = warehouse.ID.ToString() }).  
                    ToArray()  
            };  
            data.NumberOfItems = data.Items.Length;  
            return data;  
        }  

I'm using visual studio 2008, .net framework 3.5 and Telerik Controls for ASP.NET AJAX v. 2009.02.826.35, and this code was working fine with v. 2009.02.701.35

Thanks in advance

regards

Paweł Aszklar

1 Answer, 1 is accepted

Sort by
0
Paweł Aszklar
Top achievements
Rank 1
answered on 07 Sep 2009, 12:49 PM

Hi again,

I forgot to  check out internal builds. Getting v. 2009.2.906.20 helped.

I'm sorry for any trouble, but I home my posts may help someone else.

regards

Paweł Aszklar

Tags
ComboBox
Asked by
Paweł Aszklar
Top achievements
Rank 1
Answers by
Paweł Aszklar
Top achievements
Rank 1
Share this question
or