从asp.net的Web Api加载RadComboBoxItemData []

问题描述 投票:0回答:1

如何从Web APi中以aspx加载RadComboBoxItemData []?

在Web API中:

public RadComboBoxItemData[] ABC(object context)
       {

List<RadComboBoxItemData> result = null;
           ...
           return result.ToArray();
       }

telerik asp.net-web-api2 radcombobox
1个回答
0
投票

以下是我使用的非常成功的代码。

<telerik:RadComboBox runat="server" ID="comboSearch"
        Width="350" Height="300" 
        EnableLoadOnDemand="true" ShowMoreResultsBox="true"
        EnableVirtualScrolling="true"
        EmptyMessage="Search Names..."
        ItemsPerRequest="100">
        <WebServiceSettings Method="GetNames"
            Path="../../webservices/NamesWS.asmx">
        </WebServiceSettings>
    </telerik:RadComboBox>

以下是我为用例编写的定制Web服务。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Script.Services;
using System.Web.Services;
using Telerik.Web.UI;

namespace Webservices
{
    [ScriptService]
    public class NamesWS : WebService
    {
        [WebMethod]
        public RadComboBoxData GetNames(RadComboBoxContext context)
        {
              RadComboBoxData comboBoxData = null;

            if (!string.IsNullOrEmpty(context.Text) && !string.IsNullOrWhiteSpace(context.Text))
            {
                using (DbConn db = new DbConn())
                {                    
                    int max_ret_count = 100;

                    List<Users> Users = db.Users
                                            .Where(u => u.Users.Contains(context.Text.Trim()))
                                            .Take(max_ret_count).ToList();

                    if (Users == null)
                    {
                        comboBoxData = new RadComboBoxData();
                        List<RadComboBoxItemData> result = new List<RadComboBoxItemData>(1);
                        RadComboBoxItemData item = new RadComboBoxItemData();
                        item.Text = "";
                        item.Value = "";
                        result.Add(item);
                        comboBoxData.Items = result.ToArray();
                    }
                    else
                    {
                        List<RadComboBoxItemData> result = new List<RadComboBoxItemData>(context.NumberOfItems);
                        comboBoxData = new RadComboBoxData();

                        try
                        {
                            int itemsPerRequest = Convert.ToInt32(max_ret_count);
                            int itemOffSet = context.NumberOfItems;
                            int endOffSet = itemOffSet + itemsPerRequest;
                            if (endOffSet > Users.Count)
                            {
                                endOffSet = Users.Count;
                            }
                            if (endOffSet == Users.Count)
                            {
                                comboBoxData.EndOfItems = true;
                            }
                            else
                            {
                                comboBoxData.EndOfItems = false;
                            }

                            result = new List<RadComboBoxItemData>(endOffSet - itemOffSet);
                            for (int i = itemOffSet; i < endOffSet; i++)
                            {
                                RadComboBoxItemData itemData = new RadComboBoxItemData();
                                itemData.Text = Users[i].UserName;
                                itemData.Value = Users[i].UserID;

                                result.Add(itemData);
                            }

                            if (Users.Count > 0)
                            {
                                comboBoxData.Message = String.Format("Items <b>1</b>-<b>{0}</b> out of <b>{1}</b>"
                                                                    , endOffSet.ToString()
                                                                    , Users.Count.ToString());
                            }
                            else
                            {
                                comboBoxData.Message = "No matches";
                            }

                            comboBoxData.Items = result.ToArray();
                        }
                        catch (Exception ex)
                        {
                            ins_error_log err = new ins_error_log();
                            err.runSP(ex, false);
                        }
                    }
                }
            }
            else
            {
                comboBoxData = new RadComboBoxData();
                List<RadComboBoxItemData> result = new List<RadComboBoxItemData>(1);
                RadComboBoxItemData item = new RadComboBoxItemData();
                item.Text = "";
                item.Value = "";
                result.Add(item);
                comboBoxData.Items = result.ToArray();
            }

            return comboBoxData;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.