Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC и представление для пользователя из нескольких сущностей / 18 сообщений из 18, страница 1 из 1
16.12.2014, 12:03
    #38834879
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
всем привет.
есть следующие классы сущностей:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class Request
    {
        public int Id { get; set; }
        public DateTime Registered { get; set; }
        public string Author { get; set; }
        public string Phone { get; set; }
        public int UnitId { get; set; }
        public int EquipmentId { get; set; }
        public string Description { get; set; }
        public DateTime? Closed { get; set; }

        public virtual Equipment Equipment { get; set; }
        public virtual Unit Unit { get; set; }
        public virtual ICollection<HistoryRequest> RequestHistory { get; set; }
    }


и
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class HistoryRequest
    {
        public int Id { get; set; }
        public int RequestId { get; set;
        public int StateId { get; set; }
        public int PerformerId { get; set; }
        public string Comment { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }
        
        [ForeignKey("StateId")]
        public virtual StateRequest StateRequest { get; set; }
        public virtual Request Request { get; set; }
    }


и
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class StateRequest
    {
        public int Id { get; set; }
        public string State { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }
        public bool Deleted { get; set; }
        public virtual ICollection<HistoryRequest> HistoriesRequest { get; set; }
    }


для вывода информации пользователю сделал следующий класс
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public partial class ViewRequest
    {
        public int Id { get; set; }
        public int RequestId { get; set; }
        public System.DateTime Registered { get; set; }
        public string Author { get; set; }
        public string Phone { get; set; }
        public int UnitId { get; set; }
        public int EquipmentId { get; set; }
        public string Description { get; set; }
        public int StateId { get; set; }
        public int PerformerId { get; set; }
        public string Comment { get; set; }
        public DateTime? Closed { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }
    }


код для заполнения "ViewRequest" в контроллере выглядит следующим образом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public ViewResult Index()
        {
            var Requests = db.Requests;
            var RequestsHistory = db.RequestsHistory;
            var requests = from r in Requests
                           join rh in RequestsHistory on r.Id equals rh.RequestId orderby r.Id
                           select new ViewRequest
                           {
                               Id = r.Id,
                               RequestId = r.Id,
                               Registered = r.Registered,
                               Author = r.Author,
                               Phone = r.Phone,
                               UnitId = r.UnitId,
                               EquipmentId = r.EquipmentId,
                               Description = r.Description,
                               StateId = rh.StateId,
                               PerformerId = rh.PerformerId,
                               Comment = rh.Comment,
                               Closed = r.Closed,
                               Creator = rh.Creator,
                               Created = rh.Created
                           };
            return View(requests);
        }


не могу понять как сделать так что бы в представлении вместо ключа отображалось значение данного ключа из Справочника. т.е. наприме вместо "StateId отображалось State". при попытке добавить навигационное свойство вылазиет "Exception". прошу сильно не "пиннать", данную связку только начинаю изучать поэтому такие вопросы
...
Рейтинг: 0 / 0
16.12.2014, 12:18
    #38834901
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
грузишь в модель значение для StateId, к примеру поле StateName, и выводишь. Представление не должно догружать данные из бд.
...
Рейтинг: 0 / 0
16.12.2014, 12:23
    #38834907
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
handmadeFromRuгрузишь в модель значение для StateId, к примеру поле StateName, и выводишь. Представление не должно догружать данные из бд.
не сочтите слишком наглым но нельзя ли попросить Вас на выше приведенных сущностях показать как это сделать?так сказать для примера.
...
Рейтинг: 0 / 0
16.12.2014, 12:36
    #38834923
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
bald56rus,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
    public partial class ViewRequest
    {
        public int Id { get; set; }
        public int RequestId { get; set; }
        public System.DateTime Registered { get; set; }
        public string Author { get; set; }
        public string Phone { get; set; }
        public int UnitId { get; set; }
        public int EquipmentId { get; set; }
        public string Description { get; set; }
        public int StateId { get; set; }
        public string StateName { get; set; }
        public int PerformerId { get; set; }
        public string Comment { get; set; }
        public DateTime? Closed { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }
    }

/// ................

    public ViewResult Index()
        {
            var Requests = db.Requests;
            var RequestsHistory = db.RequestsHistory;
            var States = db.States;
            var requests = from r in Requests
                           join rh in RequestsHistory on r.Id equals rh.RequestId
                           join rs in States on rh.StateId queals rs.Id
                           orderby r.Id
                           select new ViewRequest
                           {
                               Id = r.Id,
                               RequestId = r.Id,
                               Registered = r.Registered,
                               Author = r.Author,
                               Phone = r.Phone,
                               UnitId = r.UnitId,
                               EquipmentId = r.EquipmentId,
                               Description = r.Description,
                               StateId = rh.StateId,
                               StateName = rs.State,
                               PerformerId = rh.PerformerId,
                               Comment = rh.Comment,
                               Closed = r.Closed,
                               Creator = rh.Creator,
                               Created = rh.Created
                           };
            return View(requests);
        }
...
Рейтинг: 0 / 0
16.12.2014, 12:38
    #38834924
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
bald56rus,
если отобразить как поле то так к примеру
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public ViewResult Index()
        {
            var requests = from r in db.Requests
                           join rh in db.RequestsHistoryon r.Id equals rh.RequestId
                           select new ViewRequest
                           {
                              ....
                               StateId = rh.StateId,
                               StateName = rh.State, // ------------------  
........
                           };
            return View(requests);
        }



если как список то тогда
Код: c#
1.
2.
3.
4.
...
requests.States = db.RequestsHistoryon.Select(x=> new {x.Id, x.State}).ToList();
а во вьюшки Html.dropdownlistfor(x=>x.StateId,Model.State.select(x=> new SelectListItem().....))
...
...
Рейтинг: 0 / 0
16.12.2014, 12:39
    #38834925
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
bald56rusданную связку только начинаю изучать поэтому такие вопросы

Рекомендую вместо конструкций join использовать навигационные свойства, и вместо отображения ентити вручную, использовать AutoMapper, он умеет дёрать нужные свойства, например, вытащит StateName из навигационного свойства State.
...
Рейтинг: 0 / 0
16.12.2014, 12:43
    #38834930
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
hVostt, спасибо огромное за пример.я думал о подобном, но тогда может мне наверно можно совсем отказаться от поля StateId во ViewRequest а сделать так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
public partial class ViewRequest
    {
        public int Id { get; set; }
        public int RequestId { get; set; }
        public System.DateTime Registered { get; set; }
        public string Author { get; set; }
        public string Phone { get; set; }
        public int UnitId { get; set; }
        public int EquipmentId { get; set; }
        public string Description { get; set; }
        public string State { get; set; }
        public int PerformerId { get; set; }
        public string Comment { get; set; }
        public DateTime? Closed { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }
    }
/**/
public ViewResult Index()
        {
            var Requests = db.Requests;
            var RequestsHistory = db.RequestsHistory;
            var States = db.States;
            var requests = from r in Requests
                           join rh in RequestsHistory on r.Id equals rh.RequestId
                           join rs in States on rh.StateId queals rs.Id
                           orderby r.Id
                           select new ViewRequest
                           {
                               Id = r.Id,
                               RequestId = r.Id,
                               Registered = r.Registered,
                               Author = r.Author,
                               Phone = r.Phone,
                               UnitId = r.UnitId,
                               EquipmentId = r.EquipmentId,
                               Description = r.Description,
                               State = rs.State,
                               PerformerId = rh.PerformerId,
                               Comment = rh.Comment,
                               Closed = r.Closed,
                               Creator = rh.Creator,
                               Created = rh.Created
                           };
            return View(requests);
        }
...
Рейтинг: 0 / 0
16.12.2014, 13:05
    #38834967
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
пока писал сообщение получил еще.
про навигационные свойства: у меня не получается, делаю так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public partial class ViewRequest
    {
        public int Id { get; set; }
        public int RequestId { get; set; }
        public System.DateTime Registered { get; set; }
        public string Author { get; set; }
        public string Phone { get; set; }
        public int UnitId { get; set; }
        public int EquipmentId { get; set; }
        public string Description { get; set; }
        public int StateId { get; set; }
        public int PerformerId { get; set; }
        public string Comment { get; set; }
        public DateTime? Closed { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }
        public virtual StateRequest StateRequest { get; set;}
    }


тогда код в контроллере такой:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public ViewResult Index()
        {
            var Requests = db.Requests;
            var RequestsHistory = db.RequestsHistory;
            var requests = from r in Requests
                           join rh in RequestsHistory on r.Id equals rh.RequestId orderby r.Id
                           select new ViewRequest
                           {
                               Id = r.Id,
                               RequestId = r.Id,
                               Registered = r.Registered,
                               Author = r.Author,
                               Phone = r.Phone,
                               UnitId = r.UnitId,
                               EquipmentId = r.EquipmentId,
                               Description = r.Description,
                               StateId = rh.StateId,
                               PerformerId = rh.PerformerId,
                               Comment = rh.Comment,
                               Closed = r.Closed,
                               Creator = rh.Creator,
                               Created = rh.Created
                           };
           requests.Include(r=>r.StateRequest
           return View();
        }


в представлении делаю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
<table>
        <tr>
            <th>RequestId</th>
            <th>Registered</th>
            <th>Author</th>
            <th>Phone</th>
            <th>UnitId</th>
            <th>EquipmentId</th>
            <th>Description</th>
            <th>StateId</th>
            <th>PerformerId</th>
            <th>Comment</th>
            <th>Closed</th>
            <th>Creator</th>
            <th>Created</th>
            <th></th>
        </tr>
    
    @foreach (var item in Model) {
        <tr>
            <td>@Html.DisplayFor(modelItem => item.RequestId)</td>
            <td>@Html.DisplayFor(modelItem => item.Registered)</td>
            <td>@Html.DisplayFor(modelItem => item.Author)</td>
            <td>@Html.DisplayFor(modelItem => item.Phone)</td>
            <td>@Html.DisplayFor(modelItem => item.UnitId)</td>
            <td>@Html.DisplayFor(modelItem => item.EquipmentId)</td>
            <td>@Html.DisplayFor(modelItem => item.Description)</td>
            <td>@Html.DisplayFor(modelItem => item.StateRequest.State)</td>
            <td>@Html.DisplayFor(modelItem => item.PerformerId)</td>
            <td>@Html.DisplayFor(modelItem => item.Comment)</td>
            <td>@Html.DisplayFor(modelItem => item.Closed)</td>
            <td>@Html.DisplayFor(modelItem => item.Creator)</td>
            <td>@Html.DisplayFor(modelItem => item.Created)</td>
            <td>
                @Html.ActionLink("EditNew", "EditNew", new { id=item.Id }) |
                @Html.ActionLink("DetailsNew", "DetailsNew", new { id=item.Id }) |
                @Html.ActionLink("Delete", "Delete", new { id=item.Id })
            </td>
        </tr>
    }
    
    </table>


по факту в представлении вместо значения состояния имею пустую строку?глупый вопрос в StateRequest необходимо навигационное свойство на модель ViewRequest?
а по поводу joinа я немного слукавил полный код котролера выглядит так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
public ViewResult Index()
        {
            var Requests = db.Requests;
            var SubQuery = from rh in db.RequestsHistory
                      group rh by rh.RequestId into grp
                      select grp.Max(g => g.Id);
            var RequestsHistory = from rh in db.RequestsHistory where SubQuery.Contains(rh.Id) select rh;
            var requests = from r in Requests
                           join rh in RequestsHistory on r.Id equals rh.RequestId orderby r.Id
                           select new ViewRequest
                           {
                               Id = r.Id,
                               RequestId = r.Id,
                               Registered = r.Registered,
                               Author = r.Author,
                               Phone = r.Phone,
                               UnitId = r.UnitId,
                               EquipmentId = r.EquipmentId,
                               Description = r.Description,
                               StateId = rh.StateId,
                               PerformerId = rh.PerformerId,
                               Comment = rh.Comment,
                               Closed = r.Closed,
                               Creator = rh.Creator,
                               Created = rh.Created
                           };
            return View(requests);

        }


мне пользователю необходимо отображать последнее состояние из HistoryRequest как сделать иначе не знаю, сделал как смог
...
Рейтинг: 0 / 0
16.12.2014, 15:04
    #38835147
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
hVostt а не могли бы Вы подсказать как сделать навигационные свойства на конкретных моделях?!
...
Рейтинг: 0 / 0
16.12.2014, 15:13
    #38835162
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
bald56rus,

не заметил, что они у вас есть. просто вы их не используйте. рекомендую начать использовать AutoMapper .

http://www.honcharuk.me/2012/04/automapper.html
http://blog.zwezdin.com/ru/275
http://smarly.net/asp-net-mvc-4-in-action/working-with-asp-net-mvc/mapping-with-automapper
...
Рейтинг: 0 / 0
17.12.2014, 00:24
    #38835591
Calabonga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
Поддерживаю предыдущего оратора, тоже использую Automapper уже давно и не нарадуюсь.
...
Рейтинг: 0 / 0
17.12.2014, 09:20
    #38835690
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
hVostt, Calabonga а не будет большей наглостью чем сейчас просьба привести пример на моих моделях, что то я если честно не понял как использовать AutoMapper
...
Рейтинг: 0 / 0
17.12.2014, 09:36
    #38835698
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
bald56rus,

с AutoMapper ваш контроллер будет выглядить так:

Код: c#
1.
2.
3.
4.
5.
6.
        public ViewResult Index()
        {
            var data = db.HistoryRequests.ToList();
            var model = Mapper.Map<ICollection<HistoryRequest>, ICollection<ViewRequest>>(data);
            return View(model);
        }



для того, чтобы это работало, требуется зарегестрировать маппинг, одним вызовом (например, на уровне Application_Start в Global.asax):

Код: c#
1.
Mapper.CreateMap<HistoryRequest, ViewRequest>();



а вью-модель поправить:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    public partial class ViewRequest
    {
        public int Id { get; set; }
        public int RequestId { get; set; }
        public DateTime RequestRegistered { get; set; }
        public string RequestAuthor { get; set; }
        public string RequestPhone { get; set; }
        public int RequestUnitId { get; set; }
        public int RequestEquipmentId { get; set; }
        public string RequestDescription { get; set; }
        public int StateId { get; set; }
        public int PerformerId { get; set; }
        public string Comment { get; set; }
        public DateTime? Closed { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }
    }
...
Рейтинг: 0 / 0
17.12.2014, 09:42
    #38835706
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
bald56rus,

случайно раньше времени отправил, вот какая вью-модель должна быть:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public partial class ViewRequest
    {
        public int Id { get; set; }
        public int RequestId { get; set; }
        public DateTime RequestRegistered { get; set; }
        public string RequestAuthor { get; set; }
        public string RequestPhone { get; set; }
        public int RequestUnitId { get; set; }
        public int RequestEquipmentId { get; set; }
        public string RequestDescription { get; set; }
        public int StateId { get; set; }
        public string StateRequestState { get;set; }
        public int PerformerId { get; set; }
        public string Comment { get; set; }
        public DateTime? RequestClosed { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }
    }



обрати внимание на выделенные моменты. AutoMapper достаточно умён, чтобы распознать вложенные свойства. все свойства, начинающиеся с Request, это вложенные свойства в навигационном свойстве Request объекта HistoryRequest.

пример маппинга:

StateRequest.State ===> StateRequestState

поэтому в одном объекте можно собрать плоский набор данных из исходника любой вложенности. просто вбей свойства, которые тебе нужны для отображения и натрави AutoMapper.
...
Рейтинг: 0 / 0
17.12.2014, 11:39
    #38835823
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
hVostt спасибо большое за помощь тока вот вопрос может он конечно и глупый но все же задам: а подобная конструкция
Код: c#
1.
Mapper.Map<ICollection<HistoryRequest>, ICollection<ViewRequest>>(data);

наверно необходима и для
Код: c#
1.
Mapper.Map<ICollection<Request>, ICollection<ViewRequest>>(data);

я правильно общий прицип уловил?
...
Рейтинг: 0 / 0
17.12.2014, 11:44
    #38835829
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
bald56rus,

Ну именно в вашем примере, вы хотите в ViewRequest получить именно историю запросов. Поэтому в объекты ViewRequest мапятся поля из RequestHistory и поля из вложенного Request.

Если хотите отобразить пользователю именно запросы, а не историю, то делаете маппинг из Request в нужную вам вью-модель, да принцип правильно уловил.
...
Рейтинг: 0 / 0
17.12.2014, 14:34
    #38836043
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
hVostt, связал как Вы посоветовали, спасибо все работает.единственное не подтягивается Equipment из класса
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class Equipment
    {
        public int Id { get; set; }
        public DateTime? Released { get; set; }
        public int TypeId { get; set; }
        public int? GroupId { get; set; }
        public string Model { get; set; }
        public string Serial { get; set; }
        public string Inventory { get; set; }
        public string Operational { get; set; }
        public string ServiceUnit { get; set; }
        public string Responsible { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }
        public int Edited { get; set; }
        public DateTime Editing { get; set; }
        public bool Deleted { get; set; }

        [ForeignKey("TypeId")]
        public virtual TypeEquipment TypeEquipment { get; set; }
        public virtual ICollection<Request> Requests { get; set; }
        public virtual ICollection<ListOfParameter> ListOfParameters { get; set; }
    }


хотя вроде сделал по аналогии со StateRequestState
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public partial class newViewRequest
    {        
        [Key]
        public int RequestId { get; set; }
        public System.DateTime RequestRegistered { get; set; }
        public string RequestAuthor { get; set; }
        public string RequestPhone { get; set; }
        public int RequestUnitId { get; set; }
        public string EquipmentInventory { get; set; }
        public string RequestDescription { get; set; }
        public string StateRequestState { get; set; }
        public int PerformerId { get; set; }
        public string Comment { get; set; }
        public DateTime? RequestClosed { get; set; }
        public int Creator { get; set; }
        public DateTime Created { get; set; }        
    }
...
Рейтинг: 0 / 0
17.12.2014, 14:50
    #38836055
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC и представление для пользователя из нескольких сущностей
вопрос снимается обращаться надо было через RequestEquipmentInventory. еще раз спасибо hVostt
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC и представление для пользователя из нескольких сущностей / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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