Telerik ASP.NET Ajax RadGrid в MVC и ViewState? - PullRequest
1 голос
/ 15 сентября 2011

Правильно, элемент управления ASP.NET Ajax в MVC. Я знаю, я знаю, что есть элементы управления Telerik MVC, но в сетке Telerik MVC нет всего, что мне нужно, поэтому я полностью настроен на использование элемента управления ASP.NET Ajax.

В любом случае, у меня есть и работает RadGrid. Проблема возникает, когда я включаю все функции, такие как разбиение по страницам, сортировка, фильтрация и т. Д. Похоже, это помещает группу по / filter / sort данным в переменную post-аргумента события:

__EVENTARGUMENT  FireCommand:2$RadGrid1$ctl00;GroupByColumn;Dialog

В моем случае, когда страница перезагружается, ничего не меняется. Что-то, что я должен позволить этому работать в MVC? Я следовал инструкциям на http://www.telerik.com/help/aspnet-ajax/mvc-getting-started.html, но это не подходит. В примере из предыдущего URL не все колокольчики и свистки, поэтому я предполагаю, что мне нужно предпринять дополнительные шаги, чтобы заставить это работать.

Спасибо!

Ответы [ 4 ]

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

Мне удалось найти решение, хотя это не очень красиво. Он использует небольшое отражение и жестко закодированное отображение дерева объектов. Надеюсь, это будет хорошей отправной точкой для тех, кому нужен ViewState в MVC.

По сути, это включает десериализацию ViewState в объект, а затем с помощью отражения вызывается LoadViewState элемента управления с правой ветвью в дереве объекта.

    string viewState = Request.Form["__VIEWSTATE"];

    if (!string.IsNullOrEmpty(viewState))
    {
        LosFormatter formatter = new LosFormatter();

        object savedStateObject = formatter.Deserialize(viewState);

        MethodInfo method = grid.GetType().GetMethod("LoadViewState", BindingFlags.NonPublic | BindingFlags.Instance);

        // TODO: Find a less brittle/more elegant way to isolate the appropiate viewstate object for this control
        // In the case of Telerik's RadGrid, the key wasy find the tree that had an array of 13 objects
        method.Invoke(grid, new object[] { (((((((((savedStateObject as Pair).First as Pair).Second as Pair).Second as System.Collections.ArrayList)[1] as Pair).Second as System.Collections.ArrayList)[1] as Pair).Second as System.Collections.ArrayList)[1] as Pair).First });
    }

    string eventArgument = Request.Form["__EVENTARGUMENT"];

    if (!string.IsNullOrEmpty(eventArgument))
    {
        grid.RaisePostBackEvent(eventArgument);
    }

См. Этот пост для более подробной информации: Поддержка ViewState в MVC ViewUserControl

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

Существует также компонент Ajax Grid, разработанный Стивеном Холтером в Microsoft, он более простой, чем Telerik RadComponent, но он расширяемый и предлагает разбиение на страницы, сортировку, редактирование, создание новых и т. Д. Вы можете скачать этот компонент с NuGet:

PM> Install-Package AjaxGridScaffolder
1 голос
/ 15 сентября 2011

Одним документом, на который я всегда обращаю внимание при интеграции RadControls для ASP.NET AJAX в ASP.NET MVC, является статья Ограничения , в которой на самом деле конкретно упоминается, что встроенная сортировка / группировка /фильтрация (все, что вызывает обратную передачу), не поддерживается в ASP.NET MVC.Тем не менее, есть некоторая надежда :) Он ссылается на этот пост в блоге, в котором есть решение, которое содержит некоторые обходные пути, которые должны быть полезны здесь.Пост немного устарел, но я думаю, что вы все равно можете извлечь из него что-то полезное.

В качестве дополнительного примечания здесь могут быть некоторые способы работы с Telerik MVC Grid, чтобы вы могли получитьвсе ваши требования и выгода от использования нативного ASP.NET MVC.Возможно опубликовать их на форумах Telerik?

0 голосов
/ 15 сентября 2011

Ознакомьтесь с этой документацией от Telerik, она должна иметь то, что вам нужно, чтобы это работало: Интеграция RadControls в ASPNET MVC

...