none
Telerik grid для MVC RRS feed

  • Вопрос

  • Здравствуйте. Использую компонент Telerik Grid для вывода данных. Загвоздка в том что контроллер возвращает не модельку, а список. Т.е. вот что у меня возвращает контроллер:

    var campaigns = (from c in context.Campains
                                 where c.UserId == UserContext.CurrentUserId
                                 orderby c.CampainId
                                 select new
                                 {
                                     CreationTime = c.CreationTime,
                                     Name = c.Name,
                                     CampainId = c.CampainId,
                                     CampainGroupsCount = c.CampainGroups.Count(),
                                     CampignContects = (from pr in context.CampainContacts where pr.CampainId == c.CampainId select pr).Count(),
                                     Processed = 100*(from pr in context.CampainContacts where pr.CampainId == c.CampainId && (int)pr.ProcessStatus!=0 select pr).Count() / (from pr in context.CampainContacts where pr.CampainId == c.CampainId select pr).Count()
                                 }).ToList();

    А во вьюхе телериковский грид требует указать ему модельку.

    @Html.Telerik().Grid(Model).Name("Grid").EnableCustomBinding(true).Pageable().Columns(columns =>
        {
     
            columns.Bound("CreationTime").Title("время");
    
        })

    Собственно если контроллер вернет это:

    var camp = from c in context.Campains
                           select c;

    то всё будет нормально. А мне надо вернуть мой собственный набор данных, как в первом методе.

    P.S. @model IEnumerable<MyClass> - закомментил... Не могу понять как привязать Telerik Grid к моему собственному набору данных.




    • Изменено Boguyang 24 декабря 2013 г. 8:44
    24 декабря 2013 г. 8:39

Ответы

  • Переименуйте ваш класс на ViewModelMyClass, тогда проблем возникнуть недолжно.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Boguyang 25 декабря 2013 г. 7:59
    25 декабря 2013 г. 5:58
    Модератор

Все ответы

  • Делайте выборку не анонимного объекта, а вашего.

    select new MyClass()
    {
      //.......
    };


    Сделаем содержимое сообщества лучше, вместе!

    24 декабря 2013 г. 9:41
    Модератор
  • Хмм... Спасибо за ответ. Честно говоря я пытался прописать в модельке свои поля и делать выборку как экземпляр своей модельки. Но так как база данных создана из кода, студия просит обновить миграции и базу данных. Можно ли что-то прописать чтобы созданные мною поля игнорировались? (Чтобы я их юзал только в моих запросах).
    25 декабря 2013 г. 3:24
  • Переименуйте ваш класс на ViewModelMyClass, тогда проблем возникнуть недолжно.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Boguyang 25 декабря 2013 г. 7:59
    25 декабря 2013 г. 5:58
    Модератор
  • Спасибо за ответы! Создал небольшой класс-обёртку для модельки и в нем прописал новые поля. Результат запроса помещаю в экзепмляр класса-обертки. Во вьюхе тип модели указан как класс-обертка. Всё работает как надо. Насколько корректен такой способ?
    • Изменено Boguyang 25 декабря 2013 г. 8:02
    25 декабря 2013 г. 8:01
  • Это стандартный подход. Шаблон DTO. Он особенно полезен, кода вам нужно передать данные из нескольких источников как одну модель.

    Сделаем содержимое сообщества лучше, вместе!

    25 декабря 2013 г. 8:04
    Модератор
  • Классно)) Надо конечно углублять знания в ООП. Спасибо Вам большое за оперативные ответы!

    P.S. шаблон DTO юзал в Java Struts... но в голову почему-то не пришло сразу


    • Изменено Boguyang 25 декабря 2013 г. 8:07
    25 декабря 2013 г. 8:06