Mam niestandardowy atrybut, wewnątrz konstruktora mojego niestandardowego atrybutu chcę ustawić wartość właściwości mojego atrybutu na typ właściwości, do której mój atrybut został zastosowany, czy jest jakiś sposób uzyskania dostępu do elementu, którego atrybut był zastosowane do wewnątrz mojej klasy atrybutów?Uzyskaj człon, do którego atrybutu zastosowano od wewnątrz konstruktora atrybutu?
Odpowiedz
Atrybuty nie działają w ten sposób, obawiam się. Są jedynie "znacznikami", przyczepionymi do przedmiotów, ale nie mogącymi z nimi współdziałać.
Atrybuty powinny być zwykle pozbawione zachowania, zawierające po prostu meta-dane dla typu, do którego są przyłączone. Każde zachowanie powiązane z atrybutem powinno być dostarczane przez inną klasę, która szuka obecności atrybutu i wykonuje zadanie.
Jeśli jesteś zainteresowany typem, do którego stosowany jest atrybut, informacja ta będzie dostępna w tym samym czasie, w którym zastanawiasz się nad uzyskaniem atrybutu.
Tak jak mówisz, nie jest to koniec świata, ponieważ znasz typ, kiedy zdobywasz atrybut niestandardowy za pomocą Reflection, ale byłoby to "miłe", gdyby typ przekazany do GetCustomAttribute był również przechowywany w System.Attribute –
Możesz zrobić dalej. To prosty przykład.
//target class
public class SomeClass{
[CustomRequired(ErrorMessage = "{0} is required", ProperytName = "DisplayName")]
public string Link { get; set; }
public string DisplayName { get; set; }
}
//custom attribute
public class CustomRequiredAttribute : RequiredAttribute, IClientValidatable
{
public string ProperytName { get; set; }
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var propertyValue = "Value";
var parentMetaData = ModelMetadataProviders.Current
.GetMetadataForProperties(context.Controller.ViewData.Model, context.Controller.ViewData.Model.GetType());
var property = parentMetaData.FirstOrDefault(p => p.PropertyName == ProperytName);
if (property != null)
propertyValue = property.Model.ToString();
yield return new ModelClientValidationRule
{
ErrorMessage = string.Format(ErrorMessage, propertyValue),
ValidationType = "required"
};
}
}
Jest to możliwe z .NET 4.5 wykorzystaniem CallerMemberName
:
[SomethingCustom]
public string MyProperty { get; set; }
Wtedy twój atrybut:
[AttributeUsage(AttributeTargets.Property)]
public class SomethingCustomAttribute : Attribute
{
public StartupArgumentAttribute([CallerMemberName] string propName = null)
{
// propName = "MyProperty"
}
}
- 1. Uzyskaj wartość niestandardowego atrybutu
- 2. Jak przekazać obiektów do konstruktora atrybutu
- 3. Powtórz wewnątrz atrybutu Kątowymi
- 4. CSS3 od konkretnego atrybutu
- 5. jquery: uzyskaj wartość niestandardowego atrybutu
- 6. Uzyskaj nazwę właściwości wewnątrz atrybutu, który ją zadeklarował.
- 7. Uzyskaj wartość atrybutu HTML w SASS
- 8. Initialize Knockout obserwowalne od wartości atrybutu elementu
- 9. Uzyskaj wartość ciągu atrybutu z html
- 10. Z analizatorem SAX, uzyskaj wartość atrybutu
- 11. Uzyskaj wartość atrybutu nadrzędnego w sass
- 12. JSTL if-oświadczenie wewnątrz HTML atrybutu
- 13. error: Element input z typem atrybutu, którego wartość to przycisk musi mieć niepustą wartość atrybutu
- 14. Przypisywanie funkcji do atrybutu obiektu
- 15. Linia przerwa wewnątrz tagu HTML wartości atrybutu
- 16. Uzyskaj dostęp do atrybutu `przeciągalnego` za pomocą javascript
- 17. Dynamicznie uzyskać wartość atrybutu klasy od typu
- 18. Pomiń zero od wartości atrybutu liczby
- 19. Przekazywanie atrybutu dyrektywy nadrzędnej do atrybutu dyrektywy podrzędnej
- 20. Uzyskiwanie dostępu do nazwy klasy i właściwości wewnątrz atrybutu
- 21. Wykrywanie zmiany atrybutu wartości atrybutu, który utworzyłem
- 22. jQuery Problem selektor atrybutu: Dynamiczne selektor atrybutu
- 23. Jak podłączyć parametry metody do atrybutu niestandardowego
- 24. Jak przypisać właściwość do atrybutu
- 25. BeautifulSoup - dodanie atrybutu do tagu
- 26. Dodawanie atrybutu DebuggerStepThrough do klasy
- 27. Uzyskaj wartość atrybutu z prostego XML za pomocą JQuery/Javascript
- 28. Uzyskaj poprzednią wartość atrybutu w elokwentnym zdarzeniu modelu.
- 29. Ograniczanie wartość atrybutu XSD na podstawie innej wartości atrybutu
- 30. Usuwanie atrybutu href
można krótko opisać przypadków użycia? – Tanmay
Jeśli możesz podać więcej szczegółów na temat problemu, który rozwiązujesz, możliwe będzie dostarczenie alternatywnego rozwiązania. –
Dzięki, wiem, w jaki sposób mogę osiągnąć to samo w inny sposób, ale chciałem wiedzieć, czy to było możliwe, ponieważ kod byłby czystszy. – ryudice