2012-01-20 16 views
0

ASP.NET MVCフレームワークが匿名型パラメータ(たとえば、HTML属性を表すパラメータを匿名型として渡すことができるHtml.ActionLinkなど)から値を取得する方法について説明できます。 Reflectionを内部的に使用していると読んでいます。私は、よりよく理解するために擬似コードまたは例を探しています。ASP.NET MVCフレームワークの匿名型パラメータ

それはあなたが辞書に匿名のオブジェクトに変換することができます RouteValueDictionary貴重なコンストラクタを使用しています
+1

MVC [ソース](http://aspnet.codeplex.com/releases)を見て、自分で確認することができます – Eranga

+0

あなたの入力をありがとう –

答えて

2

class Program 
{ 
    static void Main() 
    { 
     var anon = new { foo = "foo value", bar = "bar value" }; 
     IDictionary<string, object> values = new RouteValueDictionary(anon); 
     foreach (var item in values) 
     { 
      Console.WriteLine("{0}, {1}", item.Key, item.Value); 
     } 
    } 
} 

実装はあなたが常にASP.NET MVCのソースコードを見てとることが懸念される限りしかし、ここで関連する部分があります:あなたはそれがその後のすべての匿名のオブジェクトのプロパティとその値を取得するためにTypeDescriptor.GetPropertiesメソッドを使用して見ることができるように

public class RouteValueDictionary : IDictionary<string, object>, ICollection<KeyValuePair<string, object>>, IEnumerable<KeyValuePair<string, object>>, IEnumerable 
{ 

    public RouteValueDictionary(object values) 
    { 
     this._dictionary = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase); 
     this.AddValues(values); 
    } 

    private void AddValues(object values) 
    { 
     if (values != null) 
     { 
      foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(values)) 
      { 
       object obj2 = descriptor.GetValue(values); 
       this.Add(descriptor.Name, obj2); 
      } 
     } 
    } 

    ... 
} 

関連する問題