Asp.net MVC User Control ViewData


5

コントローラがモデルに基づいてビューをレンダリングするとき、インデクサー(ViewData ["Property"])を使用してViewDataコレクションからプロパティを取得できます。しかし、私は、以下のものを使用して呼び出すしようとした共有ユーザーコントロールがあります。

return View("Message", new { DisplayMessage = "This is a test" }); 

と私のメッセージコントロール上を、私はこれを持っていた:

<%= ViewData["DisplayMessage"] %> 

私は、これは正しくDisplayMessageとレンダリングと思うだろう、ただし、nullが戻されています。周りいじりの重い用量の後、私は最終的に強く、私のユーザーコントロールを入力するために「のMessageData」クラスを作成しました:

public class MessageControl : ViewUserControl<MessageData> 

、今この呼び出しが動作します。

return View("Message", new MessageData() { DisplayMessage = "This is a test" }); 

と同じように表示することができますこの:DisplayMessageとプロパティは、ユーザーコントロール強い型付けなしViewDataを(。すなわちViewDataを[「DisplayMessageと」])コレクションに追加されないのはなぜ

<%= ViewData.Model.DisplayMessage %> 

?これは設計によるものですか? ViewDataに "DisplayMessage"のキーが含まれているとは思わないでしょうか?もちろん

6

ViewData.Eval("DisplayMessage") 

はあなたのために働く必要がある方法。


2

私はすぐにGoogleの

http://forums.asp.net/t/1197059.aspx

には、いくつかのより多くの検索後の答えはどうやらこれが原因ラッパークラスの起こる見つけ、この質問を作成した後。それでも、デフォルトでは、渡されたプロパティはすべてViewDataコレクションに追加されるはずです。

私は本当に私自身の質問に答える停止する必要があります:(