Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / WebAPI возвращает JSON для ExtJS / 22 сообщений из 22, страница 1 из 1
19.07.2015, 15:54
    #39010753
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
Вот решил поюзать такую связку WebAPI + ExtJS и столкнулся с некоторыми проблемами.
Например, надо заполнить таблицу в ExtJS данными, но так же надо передать количество записей - вот тут проблема!
Модель:
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class DirNomen
{
   [Key]
   public int DirNomenID { get; set; }
   [Required]
   public string DirNomenName { get; set; }
}


Контролер. Метод Get
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public IQueryable<DirNomen> GetDirNomens(HttpRequestMessage request)
{
   //Параметры
   var queryStrings = request.GetQueryNameValuePairs();
   int limit = Convert.ToInt32(queryStrings.FirstOrDefault(kv => string.Compare(kv.Key, "limit", true) == 0).Value); //Записей на страницу
   int page = Convert.ToInt32(queryStrings.FirstOrDefault(kv => string.Compare(kv.Key, "page", true) == 0).Value);   //Номер страницы
   int Skip = limit * (page - 1);
   //JSON
   return db.DirNomens.OrderBy(x => x.DirNomenID).Skip(Skip).Take(limit);
}


Вернёт вот такой JSON:
Код: plaintext
1.
[{"DirNomenID":1186,"DirNomenName":"Наименование Ном-ры"}, {" ... "}]

А надо вот такой:
Код: plaintext
1.
{'sucess':true, 'total':42624, 'DirNomen': [{"DirNomenID":"1186","DirNomenName":"Наименование Ном-ры"}, {" ... "}]}

Мне как минимум надо передать клиенту (DataGrid-у ExtJS) параметр 'total':42624 - количество записей!
Вот как это сделать ...
...
Рейтинг: 0 / 0
19.07.2015, 16:32
    #39010760
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
некий супертип или отдельный метод
...
Рейтинг: 0 / 0
19.07.2015, 16:38
    #39010762
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
buredотдельный метод
Это как?
...
Рейтинг: 0 / 0
19.07.2015, 17:41
    #39010779
T87
T87
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
potkin,

Сделайте класс:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class DirNomenFullInfo
{
   List<DirNomen> DirNomes {get; set;}
   
   string Status {get; set;}

   int TotalCount {get; set;} 
} 



И возвращайте его в своем методе.
...
Рейтинг: 0 / 0
19.07.2015, 18:01
    #39010786
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
T87
Код: c#
1.
List<DirNomen> DirNomes {get; set;}



Всё хорошо, кроме этого. Не надо в публичных интерфейсах использовать List.

Прям таки повально одну и туже граблю старательно, без всякого стеснения, расставляют по коду.
...
Рейтинг: 0 / 0
19.07.2015, 18:04
    #39010789
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
hVosttПрям таки повально одну и туже граблю старательно, без всякого стеснения, расставляют по коду.а как правильно - большой-большой секрет?
...
Рейтинг: 0 / 0
19.07.2015, 18:08
    #39010793
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
Antonariyа как правильно - большой-большой секрет?

Правильно это IList, ICollection, IEnumerable.

А с недавних пор IReadOnlyCollection, IReadOnlyList, что в общем случае является предпочтительнее.

Самое простое и без заморочек это ICollection.

Но никак не List!
...
Рейтинг: 0 / 0
19.07.2015, 18:17
    #39010795
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
hVosttAntonariyа как правильно - большой-большой секрет?

Правильно это IList, ICollection, IEnumerable.ну значит большой-большой секрет почему.
...
Рейтинг: 0 / 0
19.07.2015, 18:23
    #39010796
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
Antonariyну значит большой-большой секрет почему.

Странный вопрос. Я должен теперь любую коллекцию, полученную из своего источника приводить к конкретному List<T>, потому что какой-то му**к разработчик так, не подумав, решил? А если моя коллекция ленивая и на то есть причины? Конечно, если разраб один на один со своим маленьким проектиком, то он сам себе злой буратино, но в целом так делать не надо.
...
Рейтинг: 0 / 0
19.07.2015, 18:34
    #39010799
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
сильно напоминает срач о var

зачем тащить конкретную рализацию, если потребителю достаточно интерфейса/базового класса
...
Рейтинг: 0 / 0
19.07.2015, 18:36
    #39010800
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
hVosttAntonariyну значит большой-большой секрет почему.

Странный вопрос.странно, почему ты сказал, как неправильно, а как и почему правильно, надо клещами тянуть.
...
Рейтинг: 0 / 0
19.07.2015, 18:37
    #39010801
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
Antonariyа как и почему правильно, надо клещами тянуть.
разве это не очевидно?
...
Рейтинг: 0 / 0
19.07.2015, 18:45
    #39010802
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
ИзопропилAntonariyа как и почему правильно, надо клещами тянуть.
разве это не очевидно?тому, кто написал List<DirNomen>?
...
Рейтинг: 0 / 0
19.07.2015, 19:58
    #39010818
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
Antonariyстранно, почему ты сказал, как неправильно, а как и почему правильно, надо клещами тянуть.


Изопропилразве это не очевидно?
...
Рейтинг: 0 / 0
19.07.2015, 20:42
    #39010834
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
Создал ещё одну Модель:
Код: c#
1.
2.
3.
4.
5.
6.
    public class DirNomenFullInfo
    {
        public IList<DirNomen> DirNomes { get; set; }
        public string Status { get; set; }
        public int TotalCount { get; set; } 
    }


ApiController. Метод Get:
Код: c#
1.
2.
3.
4.
5.
6.
public IQueryable<DirNomenFullInfo> GetDirNomens(HttpRequestMessage request)
{
   //...

   return db.DirNomenFullInfos.OrderBy(x => x.DirNomes.OrderBy(y => y.DirNomenID).Skip(Skip).Take(limit));
}



Получаю ошибку:
Код: plaintext
Для EntityType \"DirNomenFullInfo\" не определены ключи.

Все ключи в Модели DirNome (В первом посте постил)
...
Рейтинг: 0 / 0
19.07.2015, 20:51
    #39010838
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
А понял!
Надо типа такого, в контролере сделать:
Код: c#
1.
2.
3.
4.
5.
6.
7.
            var dirNomens = db.DirNomens.OrderBy(x => x.NameLower).Skip(Skip).Take(limit);

            DirNomenFullInfo dirNomenFullInfo = new DirNomenFullInfo();
            dirNomenFullInfo.DirNomes = dirNomens.ToList();
            dirNomenFullInfo.TotalCount = 2850;

            return dirNomenFullInfo;



Правда и здесь получаю ошибку:
Код: plaintext
1.
2.
3.
Неявное преобразование типа "UO.Models.Dir.DirNomenFullInfo" в "System.Linq.IQueryable<UO.Models.Dir.DirNomenFullInfo>" невозможно. 
Существует явное преобразование (возможно, отсутствует приведение)

...
Рейтинг: 0 / 0
19.07.2015, 20:52
    #39010839
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
potkin,

возвращать то нужно DirNomenFullInfo, а не IQueryable<DirNomenFullInfo>
...
Рейтинг: 0 / 0
19.07.2015, 20:58
    #39010843
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
Всё, всем спасибо, разобрался!
...
Рейтинг: 0 / 0
20.07.2015, 13:36
    #39011326
T87
T87
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
hVosttT87
Код: c#
1.
List<DirNomen> DirNomes {get; set;}



Всё хорошо, кроме этого. Не надо в публичных интерфейсах использовать List.

Прям таки повально одну и туже граблю старательно, без всякого стеснения, расставляют по коду.
Да, каюсь, в попыхах написал.
...
Рейтинг: 0 / 0
23.07.2015, 18:52
    #39014886
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
Всё это делается намного проще!

В методе Get:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
dynamic collectionWrapper = new
{
  sucess = true,
  total = 2850,
  DirNomen = dirNomens
};

return await Task.Run(() => Ok(collectionWrapper));


Просто у нас может быть anonymous model
...
Рейтинг: 0 / 0
24.07.2015, 13:25
    #39015397
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
дурной тон
...
Рейтинг: 0 / 0
24.07.2015, 16:25
    #39015619
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebAPI возвращает JSON для ExtJS
buredдурной тон
Аргументируйте!
И что делать, если запрос делает выборку из нескольких таблиц (Моделей) с Group By, и в Select-те имеется: Count(), Sum(), ... ???
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / WebAPI возвращает JSON для ExtJS / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]