Używam anonimowego obiektu, aby przekazać moje atrybuty HTML do niektórych metod pomocniczych. Jeśli konsument nie dodał atrybutu identyfikatora, chcę dodać go w mojej metodzie pomocniczej.
Jak mogę dodać atrybut do tego anonimowego obiektu?
c#
reflection
anonymous-objects
Boris Callens
źródło
źródło
Następująca klasa rozszerzeń zapewni Ci to, czego potrzebujesz.
źródło
Zakładam, że masz tu na myśli typy anonimowe, np.
new { Name1=value1, Name2=value2}
Itd. Jeśli tak, to nie masz szczęścia - typy anonimowe są typami normalnymi, ponieważ są to ustalony, skompilowany kod. Tak się składa, że są generowane automatycznie.Co mógł zrobić, to napisać
new { old.Name1, old.Name2, ID=myId }
, ale nie wiem, czy to naprawdę to, co chcesz. Bardziej szczegółowe informacje na temat sytuacji (w tym próbki kodu) byłyby idealne.Alternatywnie możesz utworzyć obiekt kontenera, który zawsze miał identyfikator i jakikolwiek inny obiekt zawierał pozostałe właściwości.
źródło
To zaakceptowałoby wartość id, którą powinno mieć pole tekstowe i do której powinna odnosić się etykieta. Jeśli konsument nie uwzględni teraz właściwości „id” w atrybucie textBoxHtmlAttributes, metoda utworzy niepoprawną etykietę.
Mogę sprawdzić poprzez refleksję, czy ten atrybut został dodany do obiektu labelHtmlAttributes. Jeśli tak, chcę go dodać lub utworzyć nowy anonimowy obiekt, do którego został dodany. Ale ponieważ nie mogę utworzyć nowego typu anonimowego, przechodząc przez stare atrybuty i dodając własny atrybut „id”, utknąłem.
Kontener z silnie wpisaną właściwością ID, a następnie anonimową właściwością „atrybutów” wymagałby przepisania kodu, który nie ważyłby więcej niż wymaganie „dodaj pole identyfikatora”.
Mam nadzieję, że ta odpowiedź jest zrozumiała. To koniec dnia, nie mogę już uporządkować swoich mózgów.
źródło