Пусто RadComboBoxContext - PullRequest
       17

Пусто RadComboBoxContext

0 голосов
/ 12 марта 2012

Я сталкиваюсь с проблемой при использовании RadComboBox.Я использовал пример из Telerik Demo для заполнения RadComboBox данными о деманте в новом пустом проекте.И когда элемент управления вызывает службу WCF для данных, параметр RadComboBoxContext пуст.Подскажите, пожалуйста, что я делаю не так?

Помощь очень важна!

Вот пример кода, который я использовал: ASPX:

    <telerik:RadComboBox runat="server" ID="RadComboBox1" Height="100px" 
        EnableLoadOnDemand="true" ShowMoreResultsBox="true" EnableVirtualScrolling="true"
        EmptyMessage="Type here ...">
        <WebServiceSettings Path="~/ComboBoxWcfService.svc" Method="LoadData" />
    </telerik:RadComboBox>
</div>

Служба WCF:

    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "ComboBoxWcfService" in code, svc and config file together.

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ComboBoxWcfService {
    public void DoWork()
    {
    }
    [OperationContract]
    public RadComboBoxData LoadData(RadComboBoxContext context)
    {
        //The RadComboBoxData object contains all required information for load on demand:
        // - the items 
        // - are there more items in case of paging
        // - status message to be displayed (which is optional)

        AdventureWorksDataContext northwind = new AdventureWorksDataContext();



        RadComboBoxData result = new RadComboBoxData();

        //Get all items from the Customers table. This query will not be executed untill the ToArray method is called.
        var allCustomers = from customer in northwind.Customers
                           orderby customer.ContactName
                           select new RadComboBoxItemData
                           {
                               Text = customer.ContactName
                           };


        //In case the user typed something - filter the result set
        string text = context.Text;
        if (!String.IsNullOrEmpty(text))
        {
            allCustomers = allCustomers.Where(item => item.Text.StartsWith(text));
        }
        //Perform the paging
        // - first skip the amount of items already populated
        // - take the next 10 items
        int numberOfItems = context.NumberOfItems;
        var customers = allCustomers.Skip(numberOfItems).Take(10);

        //This will execute the database query and return the data as an array of RadComboBoxItemData objects
        result.Items = customers.ToArray();


        int endOffset = numberOfItems + customers.Count();
        int totalCount = allCustomers.Count();

        //Check if all items are populated (this is the last page)
        if (endOffset == totalCount)
            result.EndOfItems = true;

        //Initialize the status message
        result.Message = String.Format("Items <b>1</b>-<b>{0}</b> out of <b>{1}</b>",
                                       endOffset, totalCount);

        return result;
    }
}

WebConfig:

      <service behaviorConfiguration="metadataAndDebug" name="WebApplication1.ComboBoxWcfService">
    <endpoint address="" behaviorConfiguration="WebBehavior" binding="webHttpBinding"
      contract="WebApplication1.ComboBoxWcfService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>

1 Ответ

0 голосов
/ 15 марта 2012

Я нашел, где была хитрость.Мне нужно было использовать службу WCF с поддержкой Ajax.Поэтому я должен был использовать AjaxBehavior вместо WebBehavior:

    <behavior name="AjaxBehavior">
      <enableWebScript />
    </behavior>
    <behavior name="WebBehavior">
      <webHttp />
    </behavior>
...