コントローラがモデルに基づいてビューをレンダリングするとき、インデクサー(ViewData ["Property"])を使用してViewDataコレクションからプロパティを取得できます。しかし、私は、以下のものを使用して呼び出すしようとした共有ユーザーコントロールがあります。Asp.net MVC User Control 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"のキーが含まれているとは思わないでしょうか?もちろん