2012-01-04 8 views
0

私は自分のビューから、対応するコントローラによって確立された匿名タイプを取得する必要があります。 this articleによれば、このような能力はC#4.0では 'dynamic'キーワードで可能になります。しかし、私が実際の例を見つけようとすると、その答えはちょっと「is possible」からちょっと「is not possible」にまでわかります。匿名タイプを支援するために「ダイナミック」を使用する

@{ 
//Currently this next line returns an error saying that 
//'object' contains no method 'Count' 
int foo = Model.items.Count(); 

//This 'foreach' works. 
foreach(dynamic lineItem in Model.items){ 
    //But this does not work. Gives another "'object' has no definition for 'name'" 
    <p>@lineItem.name</p>  } 
} 
:静的な型なしで、私の見解は、単にこのようなモデルに達する可能性がある、場合、それはいいだろう要するに

XElement headings = XElement.Parse(part.TagList); 
var items = from heading in headings.Descendants("heading") 
      select new { 
       name = heading.Attribute("name").Value, 
       tags = heading.Attribute("tags").Value, 
       content = shapeHelper.List() //This is a dynamic object!!! 
      }; //can I add 'as dynamic;' here???? 

:私の場合は

、私はコントローラがこれを作成してい

可能ですか?

+0

をすべきです作業。私は何らかの理由で私がオブジェクトを何か( 'string'、' int'など)にキャストしなければならないので、MVCビューで 'dynamic'型を使うことに疲れがちです。ビュー( 'ViewBag'を使用している場合でも)。 –

+1

で、わかりやすいmvc-good-practicesの質問をしてください - なぜここではビューモデルを使用しないのが標準的な勧告ですか?なぜ、匿名型は、ビューモデルが人口に集められたり、強く型付けされたり、捕捉された時間エラーをコンパイルしたり、魔法の文字列の問題や誤植などに敏感ではなく、要件になりますか? –

答えて

2

それはあなたが探しているまさにだが、あなたは常にViewBag使用することができわからない:以下ジャスティンの提案

コントローラ

ViewBag.Items = from heading in headings.Descendants("heading") 
       select new { 
        name = heading.Attribute("name").Value, 
        tags = heading.Attribute("tags").Value, 
        content = shapeHelper.List() 
       }; 

ビュー

ViewBag.Items.First().content; 
+0

あなたの答えは、モデルで同じ結果が得られることを意味します - 私はそのタイプをビューで宣言していない限り?私は実際にViewBagへのアクセス権を持っていないので、Orchard CMS(MVC3上に構築されています)を使用しています - 少なくとも私はそうは思わない。 –

+0

私の質問は間違っていました。私が与えた情報のいくつかは悪かった。私は自分の質問を修正して、ViewBag.Items.First()。content'構文を使用することはできないことを学びました。問題は、 'content'はビューが何も知らない静的型のプロパティだということです。静的に型指定された匿名型のプロパティは、動的オブジェクトのプロパティとは関係がないため、コレクションのアイテムを「動的」にキャストするとヘルプは表示されません。ビュー内で動的オブジェクトを使用するには、コントローラ内で動的オブジェクトを使用する必要があります(匿名型ではありません)。 –

関連する問題