2016-08-10 16 views
0

私はC#asp.net mvc 4を使用しています。私はtest.cshtmlで送信して表示する辞書を作っています 私はC#に新しいです。 cshtmlページのオブジェクト値ディクショナリ。ここc#辞書文字列オブジェクトキーで値を取得

は私のオブジェクトクラスだと私はviewbagを使用して、それを送信します。

@if (ViewBag.taskDetailVehicle.ContainsKey("3")) 
    { 
     User test1 = ViewBag.taskDetailVehicle.Where(z => z.Value.ID_Task == "3").FirstOrDefault().Value; 
     User test2 = ViewBag.taskDetailVehicle.Values.FirstOrDefault(k => k.ID_Task == "3"); 
    } 

しかし、このコードは私を与えている:

Dictionary<string, User> dic = new Dictionary<string, User>(); 
dic.Add("1", new User { ID_Task = "task1", Agent = "shasapo" }); 
dic.Add("2", new User { ID_Task = "task2", Agent = "fania" }); 
dic.Add("3", new User { ID_Task = "task3", Agent = "andre" }); 
ViewBag.taskDetailVehicle = dic; 

、ここでは私が値を取得する方法test.cshtmlの私の最初の試みですエラー: "ラムダ式を、デリゲートまたは式ツリータイプにキャストせずに、動的にディスパッチされた操作の引数として使用することはできません"。

その後、私は他の方法を試してみてください。

@if (ViewBag.taskDetailVehicle.ContainsKey("3")) 
    { 
     User test1 = ViewBag.taskDetailVehicle["3"]; 
     <p>test1.ID_Task <br/> test1.Agent </p> 
    } 

しかし、それはnullを返します。..

が私を助けてください、キーで値を取得する方法はありますか?

+0

'ユーザーTEST1 =((辞書<文字列、ユーザー>)ViewBag.taskDetailVehicle).Where(.... ' –

答えて

1

ViewBagは、dynamicオブジェクトです。コンパイル時に特定の型はありません。あなたは辞書に動的オブジェクトをキャストする必要があります。そして、

var dictionary = ViewBag.taskDetailVehicle as Dictionary<string, User>; 

@if (ViewBag.taskDetailVehicle.ContainsKey("3")) 
{ 
    User test1 = dictionary["3"]; 
} 
+0

これは役に立ちます – Shasapo

関連する問題