コントローラーがモデルに基づいてビューをレンダリングする場合、インデクサー (つまり、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" });
次のように表示できます。
<%= ViewData.Model.DisplayMessage %>
ユーザー コントロールを厳密に型指定せずに、DisplayMessage プロパティを ViewData (つまり、ViewData["DisplayMessage"]) コレクションに追加しないのはなぜですか? これは設計によるものですか?ViewData に「DisplayMessage」のキーが含まれているのは理にかなっているでしょうか?