Как получить значение свойства элемента управления из строки в asp.net - PullRequest
1 голос
/ 31 июля 2010

Мне нужно перебрать все элементы управления на веб-странице ASP.NET.В файле конфигурации у меня есть список типов элементов управления и их свойства, которые я буду обрабатывать в некотором роде.Теперь меня интересует следующее: как я могу получить это необходимое свойство, когда все, что у меня есть, это строки, то есть имена типов элементов управления и имена их соответствующих свойств.

Вот пример: В файле конфигурации Iесть строки:

controltype = "label" propertyname = "Text"  
controltype = "Image" propertyname = "ToolTip".

, поэтому у меня есть что-то вроде этого в моем коде:

List<Control> controls = GiveMeControls();  
foreach(Control control in controls)  
{  
    // in getPropertyNameFromConfig(control) I get typename of control   
    // and returns corresponding property name  from config type
    string propertyName = getPropertyNameFromConfig(control);    
    string propertyValue = getPropertyValueFromProperty(control, propertyValue);
    // !!! Don't      know how to write getPropertyValueFromProperty.  
}  

У кого-нибудь есть идеи, как разработать getPropertyValueFromProperty ()?

Спасибозаранее
ДП

Ответы [ 2 ]

2 голосов
/ 31 июля 2010

Следующая реализация примера должна делать то, что вам нужно:

    static string getPropertyValueFromProperty(object control, string propertyName)
    {
        var controlType = control.GetType();
        var property = controlType.GetProperty(propertyName, BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
        if (property == null)
            throw new InvalidOperationException(string.Format("Property “{0}” does not exist in type “{1}”.", propertyName, controlType.FullName));
        if (property.PropertyType != typeof(string))
            throw new InvalidOperationException(string.Format("Property “{0}” in type “{1}” does not have the type “string”.", propertyName, controlType.FullName));
        return (string) property.GetValue(control, null);
    }

Если у вас есть какие-либо вопросы о том, как это работает, пожалуйста, не стесняйтесь спрашивать в комментарии.

1 голос
/ 31 июля 2010

Вам нужно будет использовать Reflection API.При этом вы можете проверить типы и найти свойства по имени , а затем использовать свойства для получения значений из экземпляров элемента управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...