Как использовать отражение, чтобы получить вложенное свойство - PullRequest
0 голосов
/ 09 мая 2009

Я пишу элемент управления TwoWay Binding для ASP.NET. Наконец-то все заработало. Я перепривязываю, используя следующий код:

private void RebindData()
{
    // return if the DataValue wasn't loaded from ViewState
    if (DataValue == null)
        return;
    // extract the values from the two-way binding template
    IOrderedDictionary values = new OrderedDictionary();
    IBindableTemplate itemTemplate = DataTemplate as IBindableTemplate;
    if (itemTemplate != null)
    {
        foreach (DictionaryEntry entry in itemTemplate.ExtractValues(this))
        {
            values[entry.Key] = entry.Value;
        }
    }

    // use reflection to push the bound fields back to the datavalue
    foreach(var key in values.Keys)
    {
        var type = typeof(T);
        var pi = type.GetProperty(key.ToString());
        if (pi != null)
        {
            pi.SetValue(DataValue, values[key], null);
        }
    }
}

Это работает для простых случаев, подобных этому:

<%# Bind("Name") %>

Техника отражения, которую я использую, не работает, когда у меня есть вложенный оператор связывания, подобный этому:

<%# Bind("Customer.Name") %>

Есть ли простой способ использовать отражение для таких вложенных свойств? Должен ли я использовать рекурсивную функцию для этого или просто цикл?

1 Ответ

1 голос
/ 09 мая 2009

Почему бы не использовать ASP.NET DataBinder, который уже поддерживает это?

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