Декоратор @property на ASP net core как в django

Дело в том, что, как и в Django, вы можете добавлять свойства модели без изменения класса модели, используя декоратор @property.

Я пытаюсь добиться того же с помощью aspnetcore

То есть я хочу добавить некоторые функции в класс модели, которые будут возвращать некоторые строки/инты, чтобы получить к ним доступ из razor view (например: model.extraProperty)

Кто-нибудь может помочь мне решить эту проблему?

Я не уверен в подходе @property. Вы можете рассмотреть возможность написания собственного атрибута C#, чтобы попытаться достичь чего-то подобного, но позвольте мне представить возможное решение.

Итак, мне нужно сделать некоторые предположения, так как в примере не показано, как и где вы обрабатываете описанную логику. Если предположить, что вы выполняете логику внутри, например, TicketsController.ProcessTicketAction(), который возвращает ваше представление .cshtml, то вам действительно нужно передать в модель представления сложный объект, который представляет весь переход состояния. И это может быть достигнуто, например, путем передачи коллекции TicketData.

Здесь я бы создал класс модели представления, например class TicketModel и внутри него определил ICollection<TicketData>, и теперь, когда бы или где бы вы ни выполняли описанную логику, вы бы фактически создавали TicketData, сохраняли ссылку на билет и id.

В коде представления .cshtml вы можете извлечь нужные данные с помощью, например, LINQ и .OrderByDescending(x => (int) x.TicketStatus).FirstOrDefault().

Другим подходом может быть переделка представленного решения и сохранение коллекции TicketData внутри объекта Ticket и размещение метода GetStatus() внутри него:

    public class Ticket
    {
        public int Id { get; set; }
        public int? AssignedId { get; set; }
        public virtual AppUser Assigned { get; set; }
        public int StationId { get; set; }
        public virtual Station Station { get; set; }
        public int FailureId { get; set; }
        public virtual Failure Failure { get; set; }

        public ICollection<TicketData> Data { get; set; }
    
        public TicketStatus GetStatus() => Data?.OrderByDescending(x => (int) x.TicketStatus)?.FirstOrDefault()?.TicketStatus;
    }

А затем, если предположить, что Ticket - это ваш класс модели, вы просто перейдете к Model.GetStatus() в вашем представлении .cshtml.

Вернуться на верх