Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
13 / 15 / 5
Регистрация: 01.05.2013
Сообщений: 357
.NET 5

Как получить в атрибут элемента значение другого элемента

11.03.2021, 12:19. Показов 1766. Ответов 7

Студворк — интернет-сервис помощи студентам
Привет, форум!

Существует атрибут
C#
1
[Compare]
Он сравнивает элемент модели с текущим элементом, на котором указывается атрибут.

Как это реализуется?
С помощью чего можно получить информацию о других элементах класса из атрибута (создаю свой)?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.03.2021, 12:19
Ответы с готовыми решениями:

Как получить доступ к данным элемента формы из другого элемента этой же формы
constructor TItem.Create(Par: TFlowPanel;N:string;NameOfScript:string); begin Parent := Par; MainPanel ...

Как указать атрибут элемента внутри самого элемента?
Как указать атрибут элемента внутри самого элемента? var chechDefault = $("input:radio").prop("checked", true);

Списки. Инициализация, добавление элемента в начало и после другого элемента. Удаление элемента
uses crt; type list= ^item; item=record data: integer; next:list; end; var l:list; procedure print;

7
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
13.03.2021, 11:36
jwplaster, речь я так понимаю о System.ComponentModel.DataAnnotations.CompareAttribute. Примерно так это можно сделать
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
class MyCompareAttribute : Attribute
{
    public string OtherProperty { get; }
    public MyCompareAttribute(string otherProperty)
    {
        OtherProperty = otherProperty;
    }
}
 
bool IsValid<T>(T model)
{
    bool valid = true;
    foreach (var propInfo in typeof(T).GetProperties())
    {
        var compareAttr = propInfo.GetCustomAttribute<MyCompareAttribute>();
        if (compareAttr == null) continue;
        
        var otherPropInfo = typeof(T).GetProperty(compareAttr.OtherProperty);
        
        object propValue = propInfo.GetValue(model);
        object otherPropValue = otherPropInfo.GetValue(model);
        if (!object.Equals(propValue, otherPropValue))
        {
            valid = false;
            break;
        }
    }
    return valid;
}
Пример использования
C#
1
2
3
4
5
6
7
8
9
10
class SomeClass
{
    [MyCompare("N2")]
    public int N1 { get; set; }
    public int N2 { get; set; }
 
    public string S1 { get; set; }
    [MyCompare("S1")]
    public string S2 { get; set; }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
void Main()
{
    SomeClass[] testData = {
        new SomeClass { N1 = 1, N2 = 1, S1 = "aaa", S2 = new string('a', 3) },
        new SomeClass { N1 = 2, N2 = 1, S1 = "aaa", S2 = new string('a', 3) },
        new SomeClass { N1 = 2, N2 = 1, S1 = "aaa", S2 = new string('a', 3) },
        new SomeClass { N1 = 1, N2 = 3, S1 = "bbb", S2 = "ccc" },
    };
    foreach (var model in testData)
    {
        Console.WriteLine(IsValid(model));
    }
}
P.S. Код написан "на коленке" и нуждается в доработке. В частности нужно добавить обработку ошибок.
0
13 / 15 / 5
Регистрация: 01.05.2013
Сообщений: 357
15.03.2021, 12:06  [ТС]
OwenGlendower, да про такой метод я и сам знаю как бэ. Проверять вне все умеют.

Меня больше волнует возможность проверки внутри самого атрибута... т.е. при создании модели чтоб всё проверялось.
Или даже тут проверка происходит где-то вне, просто скрытая, а не при создании модели?

Добавлено через 43 минуты
В общем, я сам нашел решение.
https://referencesource.micros... tribute.cs
Переделал под себя и всё ок
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
15.03.2021, 12:46
Цитата Сообщение от jwplaster Посмотреть сообщение
Или даже тут проверка происходит где-то вне, просто скрытая, а не при создании модели?
Атрибут сам по себе работать не может. Где-то снаружи должен быть код учитывающий его.

Цитата Сообщение от jwplaster Посмотреть сообщение
Переделал под себя и всё ок
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
15.03.2021, 13:10
jwplaster, ну и что же ты переделал чтобы проверка происходила при создании модели?
0
13 / 15 / 5
Регистрация: 01.05.2013
Сообщений: 357
15.03.2021, 14:57  [ТС]
OwenGlendower, ну, видимо, всё же Asp.Net вызывает IsValid при биндинге модели

Добавлено через 25 секунд
nicolas2008, я переделал под себя другие штуки. А так, при биндинге всё ок работает как-то.

Добавлено через 20 секунд
nicolas2008, я переделал под себя другие штуки. А так, при биндинге всё ок работает как-то.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.03.2021, 15:56
Цитата Сообщение от jwplaster Посмотреть сообщение
я переделал под себя другие штуки
Так поделитесь с товарищами.
0
13 / 15 / 5
Регистрация: 01.05.2013
Сообщений: 357
15.03.2021, 16:20  [ТС]
kolorotur, да не, то что там по ссылке, это рабочий вариант.
Просто мне требовался атрибут-проверка другого элемента. В стиле:
Если другой элемент существует, то заданный должен быть равен null. И наоборот. В общем-то, просто переделал в исключающее или
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2021, 16:20
Помогаю со студенческими работами здесь

Получить индекс элемента одномерного массива, если известно значение элемента (без цикла)?
Получить индекс элемента одномерного массива, если известно значение элемента (без цикла)? То есть у меня есть заполненый массив. Есть...

Не могу получить атрибут class элемента в WebBrowser
На сайте есть такой код &lt;div class=&quot;product-item inline&quot;&gt;&lt;/div&gt; Пытаюсь получить класс HtmlElementCollection divs =...

Как получить hwnd элемента диалога с другого класса?
Как получить hwnd элемента диалога с другого класса? Допустим, сижу в другом классе диалоге и при одном событии сделать недоступной...

Как изменить текст элемента, который находится внутри другого элемента?
есть элемент span который находиться внутри элемента р, как сделать так чтобы к примеру вместо &lt;p id=&quot;p&quot;&gt;123&lt;span...

Как найти количество элементов в двумерном массиве до элемента и после какого-то другого элемента
Например 23 23 54 65 23 12 59 87 33 76 12 90 33 45 67 84 от 23 до элемента до 59 и в отдельный счетчик от 12 до 84


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru