Как передать данные в службу Ajax, используя Telerik Rad Grid Binding? - PullRequest
3 голосов
/ 15 сентября 2011

У меня есть Telerik RadGrid, в котором я реализую пользовательскую привязку подкачки к службе Ajax. Как передать данные, такие как строка поиска, в веб-метод?

Разметка выглядит примерно так:

 <telerik:RadGrid ID="radGridProviders" runat="server" AllowPaging="True" PageSize="10" AutoGenerateColumns="false" >
    <PagerStyle Mode="NextPrevAndNumeric" />
    <MasterTableView TableLayout="Fixed" >
        <Columns>
            ...
        </Columns>
    </MasterTableView>
    <ClientSettings>
        <Scrolling AllowScroll="True" EnableVirtualScrollPaging="True" UseStaticHeaders="True">
        </Scrolling>
        <DataBinding Location="/AjaxServices/SearchService" SelectMethod="GetProductData" SelectCountMethod="GetProductCount" StartRowIndexParameterName="startRowIndex" MaximumRowsParameterName="maxRows" />
        <ClientEvents OnCommand="showLoadingPanel" OnDataBound="hideLoadingPanel" />
        </ClientSettings>
    </telerik:RadGrid>

Я хочу передать своей службе строку поиска и / или другие параметры клиента. Как мне это сделать с помощью привязки RadGrid?

Моей службой, которая отвечает на запросы, является ASP.NET MVC Controller. Сервис прекрасно реагирует на запросы браузера. Моя проблема в том, что я не знаю, как передавать пользовательские данные, используя функции привязки Telerik.

public class SearchServiceController : Controller
{
    private ISearchController _searchController;

    public SearchServiceController(ISearchController searchController)
    {
        _searchController = searchController;
    }

    public int GetProductCount()
    {
        int returnValue = 0;

        // brevity brevity

        return returnValue ;
    }

    public List<SearchProviders_Result> GetProductData(int startRowIndex, int maxRows)
    {

           // brevity brevity

    }
}

Есть предложения?

1 Ответ

1 голос
/ 20 сентября 2011

Это то, что я нашел с небольшой помощью от Telerik Support.

В ClientSetting RadGrid добавьте метод в ClientEvents OnDataBinding. Мое имя метода имя OnClientDataBinding в этом примере

Затем создайте клиентский метод:

            // This OnClient DataBinding builds the arguments uses to call the 
            // Ajax Service used to retrieve that when needed.
            function OnClientDataBinding(sender, args) {

                // get data source location, method name and arguments
                var dataSourceLocation = args.get_location();
                var selectMethodName = args.get_methodName();
                var methodArguments = args.get_methodArguments();

            ...  

Я фактически изменил sortExpression и fitlerExpresion, и они передаются в виде массива.

        // construct arguments for Ajax Service
        var myMethodArguments = new Object();
        myMethodArguments.startRowIndex = methodArguments.startRowIndex;
        myMethodArguments.maximumRows = methodArguments.maximumRows;
        myMethodArguments.sortExpression = sortExpression;
        myMethodArguments.filterExpression = filterExpression;
        myMethodArguments.myParam1 = "David";
        myMethodArguments.myParam2 = 14926;

        args.set_methodArguments(myMethodArguments);
    }

Затем создайте свой метод Service Controller что-то вроде:

public JsonResult GetCustomerSearchResults(int startRowIndex, int maximumRows, string sortExpression, FilterExpression[] filterExpression, string myParam1, int myParam2)
    {
        IEnumerable results;

        ... fill your Data and Count. 

        return Json(new { Data = results.ToList(), Count = totalNumberOfRows });
    }

FilterExpression [] - это объект, который я создал для своего использования. Это не объект Telerik.

...