У меня есть следующий код:Как получить данные из DisplayAttribute интерфейса?
public interface TestInterface
{
[Display(Name = "Test Property")]
int Property { get; }
}
class TestClass : TestAttribute
{
public int Property { get; set; }
}
Заметим, что свойство интерфейса отмечен DisplayAttribute
. Когда я пытаюсь получить значение из атрибута, следующие примеры кода не работают.
Первый образец: прямой доступ к собственности класса.
var t = new TestClass();
var a = t.GetType().GetProperty("Property").GetCustomAttributes(true);
Второй образец: литой объект для интерфейса и получить доступ к собственности.
var t = (TestInterface)new TestClass();
var a = t.GetType().GetProperty("Property").GetCustomAttributes(true);
Но когда я передаю объект в качестве модели для MVC зрения и вызова @Html.DisplayNameFor(x => x.Property)
возвращает правильную строку "Test Property"
.
Посмотреть
@model WebApplication1.Models.TestInterface
...
@Html.DisplayNameFor(x => x.Property)
оказывает, как
Test Property
Как я могу достичь того же результата с кодом на стороне сервера? И почему я не могу сделать это с простым отражением?
Пожалуйста, смотрите на этот вопрос: [Может C# класс наследует атрибуты от интерфейса?] (Http://stackoverflow.com/ вопросы/540749/может-ас-диез-класс-наследует-атрибуты-из-ее-интерфейса). В основном, когда вы реализуете интерфейс, вам нужно обновить атрибуты. –
Обратите внимание, что '@ Html.DisplayNameForm' работает, потому что вы работаете с' TestInterface'. вместо 'TestClass'. –
@Matias во втором примере кода Я тоже работаю с TestInterface –